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.
vous chasses un bug intermittent ? Dump l'arbre de processus toutes les minutes pendant 48 heures, puis plus jamais. POST une entrée cron managée avec expires_at fixé, et la planification a une demi-vie — pas de rappel, pas de PR de cleanup, pas d'entrée obsolète six mois plus tard.
{ "schedule": "* * * * *", "command": "pgrep auth | tee -a tree.log", "expires_at": "2026-05-06T11:14:00Z" }
POST /users/me/entries avec expires_at — l'entrée tourne chaque minute, puis se retire à la deadline
Trois moments. Créez l'entrée avec une deadline. La planification tourne toute seule. À expires_at, l'entrée se supprime — et votre crontab revient à ce qu'il était avant que vous commenciez à debug.
Envoyez une entrée cron managée à l'API avec schedule, command, et un timestamp expires_at à 48 heures. vous recevez en retour un id et une confirmation que l'entrée est enabled.
L'entrée s'exécute à chaque tic de son expression cron — chaque minute, chaque heure, ce que vous avez réglé. Comportement identique à une entrée permanente, avec une discrète différence.
Quand l'horloge dépasse expires_at, l'entrée est retirée. Pas de run final, pas de ligne zombie, pas de cleanup manuel. GET /entries renvoie la liste qu'il aurait renvoyée sans vous.
Pas de script de cleanup. Pas de rappel calendrier. Pas de thread d'équipe « qui possède ça ? » dans six mois. L'entrée savait quand elle devait mourir et elle l'a fait.
Crée l'entrée avec un POST. Vérifie qu'elle est partie avec un GET 49 heures plus tard. Tout le mécanisme c'est deux appels HTTP et un timestamp — pas de daemon cron à SSH, pas de /etc/crontab à éditer.
# create a self-deleting cron entry curl -X POST \ https://cron.containers.hoody.com/users/me/entries \ -H "Content-Type: application/json" \ -d '["schedule":"* * * * *","command":"pgrep auth | tee -a tree.log","expires_at":"2026-05-06T11:14:00Z"]' # response HTTP/1.1 201 Created { "id":"e7d3", "expires_at":"2026-05-06T11:14:00Z", "enabled":true }
# 49 hours later — list is back to normal curl GET https://cron.containers.hoody.com/users/me/entries HTTP/1.1 200 OK [ { "id":"a1f2", "expires_at":null, ... }, { "id":"c4b9", "expires_at":null, ... }, { "id":"9b21", "expires_at":null, ... } ] # e7d3 was here. e7d3 deleted itself.
Le champ expires_at est le contrat. vous n'avez pas à vous souvenir de nettoyer parce que se souvenir ne fait pas partie du protocole — la deadline, oui.
Une fois que la planification a une date d'expiration, trois choses cessent d'être votre problème : la dérive, l'oubli et la fatigue d'audit. Le crontab reste propre par défaut.
Chaque entrée « je vais juste temporairement… » a une deadline intégrée. Le crontab s'auto-purge — pas de balayage de cleanup trimestriel, pas de lignes obsolètes que personne ne veut supprimer parce que personne ne sait ce qu'elles font.
vous n'avez pas à vous souvenir de retirer l'entrée. vous n'avez pas à mettre un rappel calendrier. vous n'avez pas à filer une PR de cleanup. La deadline est le rappel — et elle se déclenche toujours.
L'entrée est partie mais les runs non. Chaque exécution garde sa ligne de log, son code de sortie et son timestamp — donc la trace de « ça a tourné 48 heures puis s'est arrêté » est entièrement reconstructible après coup.
Les entrées auto-expirantes coûtent autant que les permanentes. Empile-en autant que vous voulez — l'API a été pensée pour le cas où chaque debugger de l'équipe a trois ou quatre jobs temporaires en cours.
Expressions cron standard, jusqu'à la résolution d'une minute. Le champ expires_at accepte n'importe quel timestamp RFC 3339.
Largement de quoi loger une équipe de debuggers faisant tourner chacun une poignée de probes temporaires à côté des jobs permanents.
Pas d'appel DELETE à se rappeler. Pas de ticket « nettoyer les vieux crons » sur le backlog. L'entrée gère sa propre fin de vie.
Les limites scalent avec le tier du service cron sur votre compte. Les logs sont conservés selon la fenêtre de rétention standard de Hoody Cron après l'expiration de l'entrée elle-même.
Le travail temporaire ne devrait pas laisser d'entrées crontab permanentes.
Les patterns que les développeurs sortent quand ils ont besoin d'une ligne cron one-shot. Chacun laisse une trace. expires_at l'efface.
Le travail temporaire ne devrait pas laisser d'entrées crontab permanentes.