Aller au contenu
use-cases / three-cadences-one-container / hero
CRON · UN CRONTAB · UN CONTENEUR

Trois cadences, un conteneur, sur un serveur à tarif fixe

Scrape navigateur horaire, digest SQLite quotidien, archive de fichiers hebdomadaire. Trois rythmes s'imbriquent proprement dans un seul crontab — ce ne sont que trois lignes de `* * * * *` pointant vers trois scripts. Pas de service de planificateur, pas de file de jobs, pas de pool de workers.

Lire la doc cron
facturation
ce mois
tarif fixeserveur / mois
  • s'exécute dans un serveur
  • trois cadences
  • zéro service de planificateur
cpu conteneur · 24h
−24h → maintenant
ligne de base au repos~4%
des pics uniquement aux 3 moments de déclenchement — plat entre
use-cases / three-cadences-one-container / mechanism

Un PUT écrit tout le planning

Le service Hoody Cron expose le crontab brut comme une ressource REST. Un PUT du fichier une fois et le noyau l'exécute pour toujours. Trois lignes, trois scripts — chacun un one-liner qui parle déjà HTTP.

requête · /users/root/crontab
PUT · raw crontab
# Remplace tout le crontab en un seul appel.
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
le noyau s'occupe du reste
scripts · /scripts/*.sh
exec · trois corps
# scrape.sh — toutes les heures, étaler une capture dans 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 — à 9h, calculer les deltas et envoyer le digest
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 — dimanche minuit, dump et stockage
sqlite3 /data/prices.db ".dump" | curl -T - \
  https://files.containers.hoody.com/archives/$(date +%Y-w%V).sql

Trois scripts. Trois URLs qu'ils savent déjà appeler. Une requête PUT pour installer le planning. Il n'y a aucun service de planificateur devant tout ça — le crond du noyau lit le fichier que vous avez écrit et l'exécute.

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

Trois rythmes, trois scripts

Chaque cadence a une seule expression à 5 champs et une seule ligne shell derrière. Aucune n'a besoin de connaître les deux autres — elles partagent juste un disque et une horloge.

HORAIRE · SCRAPE

Importer les pages concurrentes dans SQLite

hoody-browser capture une liste d'URLs produits. Chaque ligne va directement dans une table SQLite sur le volume du conteneur. Pas de pool de workers de scraping — la ligne cron est le pool de workers.

@hourly bash /scripts/scrape.sh
QUOTIDIEN · DIGEST

Calculer les deltas, pousser un digest

À 9h, le script digest lit les 24 dernières heures de lignes, calcule les deltas de prix, et envoie le digest en curl vers une URL pipe. Votre boîte mail / tableau de bord lit depuis le même pipe.

0 9 * * * bash /scripts/digest.sh
HEBDOMADAIRE · ARCHIVE

Vider la semaine vers une URL files

Dimanche à minuit, le script archive fait un `.dump` de SQLite, nomme le fichier par semaine ISO, et l'envoie en PUT vers hoody-files. Les anciennes lignes sont élaguées. Le volume reste petit pour toujours.

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

Ce que trois lignes débloquent

Trois cadences dans un même conteneur n'est pas un hack — c'est la forme naturelle de cron. La plateforme vous a déjà donné un planificateur ; vous avez juste arrêté de payer trois fois pour ça.

STOCKAGE

Les trois scripts partagent un disque

Le scrape horaire écrit les lignes que le digest quotidien lit. Le digest quotidien écrit les deltas que l'archive hebdomadaire dump. Il n'y a pas d'IPC entre eux — ce ne sont que trois processus sur le même volume.

OPÉRATIONS

Un conteneur à redémarrer, pas trois

Quand vous redéployez, vous redéployez une image. Quand vous regardez les logs, vous suivez un fichier de log. Quand le disque se remplit, il se remplit une fois. Le rayon d'impact d'une cadence est le même que celui d'une autre.

ÉCONOMIE

Un serveur à tarif fixe, pas de niveau planificateur

Lambda/EventBridge facturent à l'invocation ; ECS Scheduled Tasks facture le cluster toujours allumé. Sur Hoody, cela s'exécute dans le serveur à tarif fixe que vous payez déjà. Trois cadences ne coûtent pas plus qu'une.

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

Comment vous l'utilisez vraiment

Le crontab est un fichier. Le fichier a une URL. Tout ce que vous feriez sur le fichier, vous pouvez le faire en HTTP.

  1. AJOUTER UNE QUATRIÈME

    POST /users/root/entries

    Crée une entrée gérée avec un UUID et un commentaire optionnel. L'API injecte la ligne dans le crontab pour vous et vous donne une poignée pour l'activer, la désactiver ou la supprimer plus tard.

  2. DÉSACTIVER SANS SUPPRIMER

    PATCH enabled: false

    Mettez en pause une cadence pendant un incident sans perdre sa définition. Réactivez-la quand l'incident se ferme. La ligne reste dans le fichier, commentée comme managed-disabled.

  3. LIRE LE FICHIER

    GET /users/root/crontab

    Récupérez le crontab brut à tout moment, y compris toutes les entrées gérées. Comparez-le à votre dépôt. Envoyez-le dans le contrôle de version. Cron est un fichier, et maintenant le fichier est une URL.

Endpoints depuis l'API Hoody Cron : CRUD d'entrées gérées plus lecture/écriture brute du crontab par utilisateur. Expressions standards à 5 champs et macros (@hourly, @daily, @weekly).

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

Ce que vous ne payez pas

Trois chiffres tirés du mécanisme réel. Les chiffres viennent des garanties de l'API Hoody Cron et du modèle de serveur à tarif fixe — pas de benchmarks inventés.

  1. SERVEUR

    Les trois cadences s'exécutent dans le même serveur à tarif fixe. Un serveur d'entrée commence à 29 $ / mois ; des lignes cron supplémentaires n'ajoute pas de charge.

  2. LIGNES CRON

    Une @hourly, une quotidienne à 9h, une hebdomadaire le dimanche. Trois lignes dans /users/root/crontab. Tout l'orchestrateur tient dans une requête PUT.

  3. SERVICES SUPPLÉMENTAIRES0

    Pas de Lambda, pas d'EventBridge, pas de Sidekiq, pas de planificateur Airflow, pas de définition ECS scheduled task. L'API HTTP pour cron EST le planificateur.

Selon l'API Hoody Cron : entrées gérées via CRUD JSON, lecture/écriture brute du crontab, auto-expiration via expires_at, et isolation du crontab par utilisateur. Macros @hourly / @daily / @weekly acceptées aux côtés des expressions à 5 champs.

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

Trois cadences, trois lignes cron, un conteneur sur un serveur à tarif fixe commençant à 29 $ / mois.

HORAIRE@hourly bash /scripts/scrape.shprix concurrents → sqlite
QUOTIDIEN0 9 * * * bash /scripts/digest.sh9h — agréger les deltas
HEBDOMADAIRE0 0 * * 0 bash /scripts/archive.shdimanche — parquet vers fichiers
avant · trois lambdas, trois facturesaprès · un serveur à tarif fixe, beaucoup de lignes cron
Lire la doc cron
use-cases / three-cadences-one-container / replaces

Ce que cela remplace

Trois Lambdas, trois GitHub Actions, trois ECS scheduled tasks — les stacks standards qu'on attrape pour trois cadences. Chacun vous facture par cadence ou par invocation ; Hoody facture le serveur.

  • trois fonctions AWS LambdaFacturation à l'invocation pour ce qui n'est que trois scripts shell sur un disque
  • trois plannings GitHub ActionsTout un runner CI lancé pour une requête SQLite de 5 secondes
  • trois workers SidekiqUn pool de workers backé par Redis pour des jobs qui ne partagent que le disque
  • trois fonctions serverless / trois facturesTrois déploiements, trois logs, trois compteurs de tarification pour la même logique
  • orchestration multi-services (Airflow, Step Functions)Un moteur de DAG pour un graphe qui a zéro arête entre ses trois nœuds
  • trois ECS scheduled tasksTrois définitions de tâche, trois rôles IAM, trois règles CloudWatch
use-cases / three-cadences-one-container / cta

Arrêtez de louer un planificateur. Écrivez le planning dans un fichier. Le conteneur exécute déjà cron — trois lignes plus tard, vous avez livré tout le pipeline.

Lire la doc cron
use-cases / three-cadences-one-container / related

Découvrez les autres