Pular para o conteúdo
use-cases / three-cadences-one-container / hero
CRON · UM CRONTAB · UM CONTÊINER

Três cadências, um contêiner, em um servidor de tarifa fixa

Scrape de navegador a cada hora, resumo SQLite diário, arquivamento semanal de arquivos. Três ritmos cabem direitinho em um crontab — são apenas três linhas de `* * * * *` apontando para três scripts. Sem serviço de scheduler, sem fila de jobs, sem pool de workers.

cobrança
este mês
tarifa fixaservidor / mês
  • roda dentro de um servidor
  • três cadências
  • zero serviços de scheduler
cpu do contêiner · 24h
−24h → agora
linha de base ociosa~4%
picos só nos 3 horários de disparo — flat entre eles
use-cases / three-cadences-one-container / mechanism

Um PUT escreve o agendamento inteiro

O serviço Hoody Cron expõe o crontab raw como um recurso REST. Faça PUT do arquivo uma vez e o kernel roda para sempre. Três linhas, três scripts — cada um um one-liner que já fala HTTP.

request · /users/root/crontab
PUT · crontab raw
# Substitui o crontab inteiro em uma chamada.
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
o kernel cuida do resto
scripts · /scripts/*.sh
exec · três corpos
# scrape.sh — toda hora, manda um screenshot para o 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 — às 9h, calcula deltas e envia o resumo
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 à meia-noite, dump e armazenamento
sqlite3 /data/prices.db ".dump" | curl -T - \
  https://files.containers.hoody.com/archives/$(date +%Y-w%V).sql

Três scripts. Três URLs que eles já sabem chamar. Um PUT para instalar o agendamento. Não há serviço de scheduler na frente disso — o crond do kernel lê o arquivo que você escreveu e executa.

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

Três ritmos, três scripts

Cada cadência tem uma única expressão de 5 campos e uma única linha de shell por trás. Nenhuma precisa saber das outras duas — elas só compartilham um disco e um relógio.

HORÁRIA · SCRAPE

Puxa páginas de concorrentes para SQLite

hoody-browser tira screenshots de uma lista de URLs de produtos. Cada linha vai direto para uma tabela SQLite no volume do contêiner. Sem pool de workers de scrape — a linha cron é o pool de workers.

@hourly bash /scripts/scrape.sh
DIÁRIA · RESUMO

Calcula deltas, envia um resumo

Às 9h o script de resumo lê as últimas 24 horas de linhas, calcula deltas de preço e envia o resumo via curl para uma URL de pipe. Sua caixa de entrada / dashboard lê do mesmo pipe.

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

Despeja a semana em uma URL de arquivos

Domingo à meia-noite o script de arquivamento faz `.dump` do SQLite, nomeia o arquivo pela semana ISO e faz PUT no hoody-files. Linhas antigas são podadas. O volume continua pequeno para sempre.

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

O que três linhas destravam

Três cadências em um contêiner não é gambiarra — é o formato natural do cron. A plataforma já te deu um scheduler; você só parou de pagar três vezes por ele.

ARMAZENAMENTO

Os três scripts compartilham um disco

O scrape horário escreve as linhas que o resumo diário lê. O resumo diário escreve os deltas que o arquivamento semanal despeja. Não há IPC entre eles — são apenas três processos no mesmo volume.

OPERAÇÕES

Um contêiner para reiniciar, não três

Quando você redeploya, redeploya uma imagem. Quando confere logs, segue um arquivo de log. Quando o disco enche, enche uma vez. O raio de impacto de qualquer cadência é igual ao de qualquer outra.

ECONOMIA

Uma fatura, sem tier de scheduler

Lambda + EventBridge cobra por invocação. ECS Scheduled Tasks cobra o cluster always-on. O contêiner Hoody cobra o contêiner — as linhas cron são grátis. Três cadências não custam mais que uma.

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

Como você usa de verdade

O crontab é um arquivo. O arquivo tem URL. Qualquer coisa que você faria com o arquivo, dá para fazer por HTTP.

  1. ADICIONAR UMA QUARTA

    POST /users/root/entries

    Cria uma entrada gerenciada com UUID e um comentário opcional. A API injeta a linha no crontab pra você e devolve um handle para habilitar, desabilitar ou apagar depois.

  2. DESABILITAR SEM APAGAR

    PATCH enabled: false

    Pause uma cadência durante um incidente sem perder a definição. Religue quando o incidente fechar. A linha continua no arquivo, comentada como managed-disabled.

  3. LER O ARQUIVO

    GET /users/root/crontab

    Pegue o crontab raw de volta a qualquer momento, incluindo todas as entradas gerenciadas. Faça diff contra seu repositório. Mande para o controle de versão. Cron é um arquivo, e agora o arquivo é uma URL.

Endpoints da Hoody Cron API: CRUD de entradas gerenciadas mais leitura/escrita do crontab raw por usuário. Expressões padrão de 5 campos e macros (@hourly, @daily, @weekly).

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

O que você não está pagando

Três números do mecanismo real. Vêm das garantias da Hoody Cron API e do modelo de servidor de tarifa fixa — não de benchmarks inventados.

  1. SERVIDOR

    As três cadências rodam dentro do mesmo servidor de tarifa fixa. O servidor de entrada começa em $29/mês; linhas cron extras não adicionam nenhuma cobrança extra.

  2. LINHAS CRON

    Uma @hourly, uma diária às 9h, uma semanal no domingo. Três linhas em /users/root/crontab. O orquestrador inteiro cabe em um PUT.

  3. SERVIÇOS EXTRAS0

    Sem Lambda, sem EventBridge, sem Sidekiq, sem scheduler Airflow, sem definição de tarefa agendada ECS. A API HTTP do cron É o scheduler.

Conforme a Hoody Cron API: entradas gerenciadas via CRUD JSON, leitura/escrita do crontab raw, expiração automática via expires_at e isolamento de crontab por usuário. Macros @hourly / @daily / @weekly aceitas junto com expressões de 5 campos.

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

Três cadências, três linhas cron, um contêiner em um servidor de tarifa fixa começando em $29/mês.

HORÁRIA@hourly bash /scripts/scrape.shpreços de concorrentes → sqlite
DIÁRIA0 9 * * * bash /scripts/digest.sh9h — consolida deltas
SEMANAL0 0 * * 0 bash /scripts/archive.shdomingo — parquet em arquivos
antes · três lambdas, três faturasdepois · um servidor de tarifa fixa, muitas linhas cron
use-cases / three-cadences-one-container / replaces

O que isso substitui

Três Lambdas, três GitHub Actions, três tarefas agendadas ECS — as stacks padrão para três cadências. Cada uma cobra por cadência ou invocação; Hoody cobra pelo servidor.

  • três funções AWS LambdaCobrança por invocação para o que são apenas três scripts shell em um disco
  • três agendamentos GitHub ActionsUm runner de CI inteiro subido para uma query SQLite de 5 segundos
  • três workers SidekiqUm pool de workers ancorado em Redis para jobs que não compartilham nada além do disco
  • três funções serverless / três faturasTrês deploys, três logs, três medidores de preço para a mesma lógica
  • orquestração multi-serviço (Airflow, Step Functions)Um motor de DAG para um grafo que tem zero arestas entre seus três nós
  • três tarefas agendadas ECSTrês definições de tarefa, três roles IAM, três regras CloudWatch
use-cases / three-cadences-one-container / cta

Pare de alugar um scheduler. Escreva o agendamento em um arquivo. O contêiner já roda cron — três linhas depois, você entregou o pipeline inteiro.

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

Leia os outros