Ir al contenido
use-cases / three-cadences-one-container / hero
CRON · UN CRONTAB · UN CONTENEDOR

Tres cadencias, un contenedor, en un servidor de tarifa plana

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.

Leer los docs de cron
facturación
este mes
tarifa planaservidor / mes
  • se ejecuta dentro de un servidor
  • tres cadencias
  • cero servicios de scheduler
cpu del contenedor · 24h
−24h → ahora
línea base en reposo~4%
picos solo en los 3 momentos de disparo — plano entre ellos
use-cases / three-cadences-one-container / mechanism

Un PUT escribe la programación entera

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.

request · /users/root/crontab
PUT · crontab raw
# 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
el kernel hace el resto
scripts · /scripts/*.sh
exec · tres cuerpos
# 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).sql

Tres 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.

use-cases / three-cadences-one-container / cadences

Tres ritmos, tres scripts

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.

POR HORA · SCRAPE

Tira páginas de la competencia a SQLite

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.

@hourly bash /scripts/scrape.sh
DIARIA · RESUMEN

Calcula deltas, manda un resumen

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.

0 9 * * * bash /scripts/digest.sh
SEMANAL · ARCHIVO

Dumpea la semana a una URL de ficheros

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.

0 0 * * 0 bash /scripts/archive.sh
use-cases / three-cadences-one-container / powers

Lo que desbloquean tres líneas

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.

ALMACENAMIENTO

Los tres scripts comparten un disco

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.

OPERACIÓN

Un contenedor que reiniciar, no tres

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.

ECONOMÍA

Un servidor de tarifa plana, sin tier de scheduler

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.

use-cases / three-cadences-one-container / operations

Cómo lo usas en realidad

El crontab es un archivo. El archivo tiene una URL. Lo que harías al archivo, lo puedes hacer por HTTP.

  1. AÑADIR UNA CUARTA

    POST /users/root/entries

    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.

  2. DESACTIVAR SIN BORRAR

    PATCH enabled: false

    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.

  3. LEER EL ARCHIVO

    GET /users/root/crontab

    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).

use-cases / three-cadences-one-container / economics

Lo que no estás pagando

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.

  1. SERVIDOR

    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.

  2. LÍNEAS CRON

    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.

  3. SERVICIOS EXTRA0

    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.

use-cases / three-cadences-one-container / punchline

Tres cadencias, tres líneas cron, un contenedor en un servidor de tarifa plana que comienza en $29/mes.

POR HORA@hourly bash /scripts/scrape.shprecios de la competencia → sqlite
DIARIA0 9 * * * bash /scripts/digest.sh9h — resumen de deltas
SEMANAL0 0 * * 0 bash /scripts/archive.shdomingo — parquet a ficheros
antes · tres lambdas, tres facturasdespués · un servidor de tarifa plana, muchas líneas cron
Leer los docs de cron
use-cases / three-cadences-one-container / replaces

Lo que esto reemplaza

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.

  • tres funciones AWS LambdaFacturación por invocación para lo que son tres scripts de shell en un disco
  • tres programaciones de GitHub ActionsUn runner de CI entero arrancado para una consulta SQLite de 5 segundos
  • tres workers de SidekiqUn pool de workers con Redis detrás para jobs que no comparten estado salvo el disco
  • tres funciones serverless / tres facturasTres despliegues, tres logs, tres contadores de precios para la misma lógica
  • orquestación multi-servicio (Airflow, Step Functions)Un motor de DAGs para un grafo que tiene cero aristas entre sus tres nodos
  • tres tareas programadas de ECSTres definiciones de tarea, tres roles IAM, tres reglas de CloudWatch
use-cases / three-cadences-one-container / cta

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.

Leer los docs de cron
use-cases / three-cadences-one-container / related

Lee los otros