Soixante conteneurs sur un seul serveur
Une seule machine bare-metal fait tourner des dizaines à des centaines de conteneurs Hoody. La déduplication KSM et BTRFS rend le coût marginal quasi nul.
Hourly browser scrape, daily SQLite digest, weekly file archive. Three rhythms nest cleanly in one crontab — they're just three rows of `* * * * *` pointing at three scripts. No scheduler service, no job queue, no worker pool.
un crontab · trois cadences · même conteneur
Le service Hoody Cron expose le crontab brut comme une ressource REST. Faites un PUT du fichier une seule fois et le noyau l'exécute pour toujours. Trois lignes, trois scripts — chacun un one-liner qui parle déjà HTTP.
# Replace the entire crontab in one call.
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 — every hour, fan a screenshot into 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 — at 9am, compute deltas and pipe the 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 — sunday at midnight, dump and store
sqlite3 /data/prices.db ".dump" | curl -T - \
https://files.containers.hoody.com/archives/$(date +%Y-w%V).sqlTrois scripts. Trois URL qu'ils savent déjà appeler. Une requête PUT pour installer la planification. Il n'y a aucun service de planification devant — le crond du noyau lit le fichier que vous avez écrit et l'exécute.
Chaque cadence repose sur une seule expression à 5 champs et une seule ligne shell. Aucune n'a besoin de connaître les deux autres — elles partagent simplement un disque et une horloge.
hoody-browser capture une liste d'URLs produits. Chaque ligne atterrit 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.
À 9 h, le script de récapitulatif lit les dernières 24 heures de lignes, calcule les deltas de prix et curl le récapitulatif vers une URL pipe. Votre boîte mail / dashboard lit depuis le même pipe.
Sunday at midnight the archive script `.dump`s SQLite, names the file by ISO week, and PUTs it to hoody-files. Old rows get pruned. The volume stays small forever.
Trois cadences dans un conteneur, ce n'est pas un bricolage — c'est la forme naturelle de cron. La plateforme vous a déjà donné un planificateur ; vous avez juste cessé de le payer trois fois.
Le scrape horaire écrit les lignes que lit le récapitulatif quotidien. Le récapitulatif quotidien écrit les deltas que vide l'archive hebdomadaire. Aucun IPC entre eux — juste trois processus sur le même volume.
Quand vous redéployez, vous redéployez une seule image. Quand vous consultez les logs, vous suivez un seul fichier de log. Quand le disque se remplit, il se remplit une fois. Le rayon d'impact d'une cadence vaut celui de n'importe quelle autre.
Lambda/EventBridge facturent à l'invocation ; ECS Scheduled Tasks facture le cluster toujours actif. Sur Hoody, tout ça tourne dans le serveur au forfait que vous payez déjà. Trois cadences ne coûtent pas plus qu'une.
Le crontab est un fichier. Le fichier a une URL. Tout ce que vous feriez au fichier, vous pouvez le faire en HTTP.
Créez une entrée managée avec un UUID et un commentaire optionnel. L'API injecte la ligne dans le crontab pour vous et vous donne un handle pour l'activer, la désactiver ou la supprimer plus tard.
Mettez une cadence en pause pendant un incident sans perdre sa définition. Réactivez-la quand l'incident est clos. La ligne reste dans le fichier, commentée comme managed-disabled.
Récupérez le crontab brut à tout moment, avec toutes les entrées managées. Diffez-le contre votre repo. Envoyez-le dans votre gestion de versions. Cron est un fichier, et désormais le fichier est une URL.
Endpoints de l'API Hoody Cron : CRUD d'entrées gérées plus lecture/écriture complète du crontab brut par utilisateur. Expressions standard à 5 champs et macros (@hourly, @daily, @weekly).
Trois chiffres tirés du fonctionnement réel. Les chiffres proviennent des garanties de l'API Hoody Cron et du modèle de serveur à tarif fixe — pas de benchmarks inventés.
Les trois cadences tournent dans le même serveur au forfait. Le serveur d'entrée commence à $29/mois ; les lignes cron supplémentaires ne coûtent rien de plus.
Un @hourly, un quotidien à 9 h, un hebdomadaire le dimanche. Trois lignes dans /users/root/crontab. Tout l'orchestrateur tient dans une seule requête PUT.
Pas de Lambda, pas d'EventBridge, pas de Sidekiq, pas de scheduler Airflow, pas de définition de tâche planifiée ECS. L'API HTTP du cron EST le scheduler.
Selon l'API Hoody Cron : entrées gérées via CRUD JSON, lecture/écriture du crontab brut, expiration automatique via expires_at, et isolation du crontab par utilisateur. Macros @hourly / @daily / @weekly acceptées en plus des expressions à 5 champs.
Trois cadences, trois lignes cron, un conteneur sur un serveur à tarif fixe à partir de 29 $/mois.
Trois Lambdas, trois GitHub Actions, trois tâches planifiées ECS — les stacks réflexes habituels pour trois cadences. Chacun vous facture à la cadence ou à l'invocation ; Hoody facture le serveur.
Arrêtez de louer un planificateur. Écrivez la planification dans un fichier. Le conteneur exécute déjà cron — trois lignes plus tard, vous avez livré tout le pipeline.