
Sesenta contenedores en un servidor
Un servidor bare-metal ejecuta decenas a cientos de contenedores Hoody. KSM y dedup BTRFS hacen que el costo marginal sea casi cero.
Scrape de navegador por hora, resumen SQLite diario, archivo de ficheros semanal. Tres ritmos encajan limpiamente en un solo crontab — son solo tres filas de `* * * * *` apuntando a tres scripts. Sin servicio de scheduler, sin cola de jobs, sin pool de workers.
un crontab · tres cadencias · mismo contenedor
El servicio Hoody Cron expone el crontab raw como un recurso REST. Haz PUT del archivo una vez y el kernel lo ejecuta para siempre. Tres líneas, tres scripts — cada uno una sola línea que ya habla HTTP.
# Reemplaza el crontab entero en una sola llamada.
PUT /users/root/crontab
Content-Type: text/plain
@hourly bash /scripts/scrape.sh
0 9 * * * bash /scripts/digest.sh
0 0 * * 0 bash /scripts/archive.sh
HTTP/1.1 204 No Content# scrape.sh — cada hora, mete una captura en sqlite
curl -sS https://browser.containers.hoody.com/screenshot \
--data-urlencode "url=https://store.hoody.com/p/123" | sqlite3 /data/prices.db \
"INSERT INTO rows VALUES (?, ?, ?)"
# digest.sh — a las 9h, calcula deltas y manda el resumen por la pipe
sqlite3 /data/prices.db < /scripts/digest.sql \
> /tmp/digest.txt && curl -T /tmp/digest.txt \
https://pipe.hoody.com/api/v1/pipe/digest
# archive.sh — domingo a medianoche, dump y guarda
sqlite3 /data/prices.db ".dump" | curl -T - \
https://files.containers.hoody.com/archives/$(date +%Y-w%V).sqlTres scripts. Tres URLs que ya saben llamar. Un PUT para instalar la programación. No hay servicio de scheduler delante de esto — el crond del kernel lee el archivo que escribiste y lo ejecuta.
Cada cadencia tiene una sola expresión de 5 campos y una sola línea de shell detrás. Ninguna necesita saber de las otras dos — solo comparten un disco y un reloj.
hoody-browser hace screenshots de una lista de URLs de producto. Cada fila va directamente a una tabla SQLite en el volumen del contenedor. Sin pool de workers de scrape — la línea cron es el pool de workers.
A las 9h el script de resumen lee las filas de las últimas 24 horas, calcula los deltas de precio y hace curl del resumen a una URL pipe. Tu inbox / dashboard lee desde la misma pipe.
Domingo a medianoche el script de archivo hace `.dump` de SQLite, nombra el archivo por semana ISO y lo envía con PUT a hoody-files. Las filas viejas se podan. El volumen se mantiene pequeño para siempre.
Tres cadencias en un contenedor no es un hack — es la forma natural de cron. La plataforma ya te dio un scheduler; solo dejaste de pagar tres veces por él.
El scrape por hora escribe las filas que lee el resumen diario. El resumen diario escribe los deltas que dumpea el archivo semanal. No hay IPC entre ellos — son solo tres procesos en el mismo volumen.
Cuando redespliegas, redespliegas una imagen. Cuando miras logs, haces tail a un solo archivo. Cuando se llena el disco, se llena una vez. El radio de impacto de cualquier cadencia es el mismo que el de cualquier otra.
Lambda/EventBridge cobran por invocación; ECS Scheduled Tasks cobra el clúster siempre encendido. En Hoody, esto se ejecuta dentro del servidor de tarifa plana que ya pagas. Tres cadencias no cuestan más que una.
El crontab es un archivo. El archivo tiene una URL. Lo que harías al archivo, lo puedes hacer por HTTP.
Crea una entrada gestionada con UUID y un comentario opcional. La API te inyecta la línea en el crontab y te devuelve un handle para activar, desactivar o borrar después.
Pausa una cadencia durante un incidente sin perder su definición. Vuelve a activarla cuando se cierre el incidente. La línea se queda en el archivo, comentada como managed-disabled.
Recupera el crontab raw en cualquier momento, incluyendo todas las entradas gestionadas. Compáralo con tu repo. Mándalo a control de versiones. Cron es un archivo, y ahora el archivo es una URL.
Endpoints de la API de Hoody Cron: CRUD de entradas gestionadas más lectura/escritura completa del crontab raw por usuario. Expresiones estándar de 5 campos y macros (@hourly, @daily, @weekly).
Tres números del mecanismo real. Las cifras vienen de las garantías de la API de Hoody Cron y del modelo de servidor de tarifa plana — no son benchmarks inventados.
Las tres cadencias se ejecutan dentro del mismo servidor de tarifa plana. El servidor de entrada comienza en $29/mes; líneas cron extras no añaden cargo extra.
Una @hourly, una diaria a las 9h, una semanal en domingo. Tres líneas en /users/root/crontab. El orquestador entero cabe en un PUT.
Sin Lambda, sin EventBridge, sin Sidekiq, sin scheduler de Airflow, sin definición de scheduled task de ECS. La API HTTP de cron ES el scheduler.
Según la API de Hoody Cron: entradas gestionadas vía CRUD JSON, lectura/escritura del crontab raw, auto-expiración vía expires_at y aislamiento del crontab por usuario. Las macros @hourly / @daily / @weekly se aceptan junto a las expresiones de 5 campos.
Tres cadencias, tres líneas cron, un contenedor en un servidor de tarifa plana que comienza en $29/mes.
Tres Lambdas, tres GitHub Actions, tres tareas programadas de ECS — los stacks habituales para tres cadencias. Cada uno te cobra por cadencia o invocación; Hoody cobra por el servidor.
Deja de alquilar un scheduler. Escribe la programación en un archivo. El contenedor ya ejecuta cron — tres líneas después, has lanzado el pipeline entero.