
Soixante conteneurs sur un seul serveur
Une machine bare-metal exécute des dizaines à des centaines de conteneurs Hoody. La dédupplication KSM et BTRFS rend le coût marginal quasi nul.
Vous chassez un bug intermittent ? Dumpez l'arbre de processus chaque minute pendant 48 heures, puis plus jamais. POSTez une entrée cron managée avec expires_at fixé, et le planning a une demi-vie — pas de rappel, pas de PR de nettoyage, pas d'entrée orpheline 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 supprime elle-même à l'échéance
Trois moments. Créez l'entrée avec une échéance. Le planning tourne tout seul. À expires_at, l'entrée se supprime — et votre crontab redevient ce qu'il était avant que vous ne commenciez à déboguer.
Envoyez à l'API une entrée cron managée avec un planning, une commande et un timestamp expires_at à 48 heures. Vous recevez un id et la confirmation que l'entrée est activée.
L'entrée s'exécute à chaque tick de son expression cron — chaque minute, chaque heure, comme vous le voulez. Comportement identique à une entrée permanente, à une discrète différence près.
Quand l'horloge dépasse expires_at, l'entrée est retirée. Pas d'exécution finale, pas de ligne zombie, pas de nettoyage manuel. GET /entries renvoie la liste qu'il aurait sans vous.
Pas de script de nettoyage. Pas de rappel calendrier. Pas de fil « qui possède ça ? » à l'échelle de l'équipe dans six mois. L'entrée savait quand elle devait mourir et elle l'a fait.
Créez l'entrée avec un POST. Vérifiez qu'elle est partie avec un GET 49 heures plus tard. Tout le mécanisme tient en deux appels HTTP et un timestamp — pas de daemon cron à atteindre en SSH, pas de /etc/crontab à éditer.
# create a self-deleting cron entry curl -X POST \ https://cron.containers.hoody.com/api/v1/cron/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/api/v1/cron/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 — l'échéance, si.
Une fois que le planning a une date d'expiration, trois choses cessent d'être votre problème : la dérive, la surveillance et la fatigue d'audit. Le crontab reste propre par défaut.
Chaque entrée « je vais juste temporairement… » porte une échéance intégrée. Le crontab s'auto-élague — pas de grand ménage trimestriel, pas de lignes orphelines que personne ne veut supprimer parce que personne ne sait à quoi elles servaient.
Vous n'avez pas à vous souvenir de retirer l'entrée. Vous n'avez pas à poser un rappel calendrier. Vous n'avez pas à déposer une PR de nettoyage. L'échéance est le rappel — et elle se déclenche toujours.
L'entrée est partie mais pas les exécutions. Chaque exécution garde sa ligne de log, son code de sortie et son timestamp — la trace « ça a tourné 48 heures puis s'est arrêté » reste pleinement reconstituable après coup.
Les entrées à auto-expiration coûtent autant que les permanentes. Empilez-en autant que nécessaire — l'API a été pensée pour le cas où chaque débogueur de l'équipe a trois ou quatre tâches temporaires en cours.
Expressions cron standard, jusqu'à la résolution d'une minute. Le champ expires_at accepte tout timestamp RFC 3339.
De quoi voir venir : une équipe de débogueurs lançant chacun une poignée de sondes temporaires en plus des tâches permanentes.
Pas d'appel DELETE à mémoriser. Pas de ticket « nettoyer les vieux crons » dans le backlog. L'entrée gère sa propre fin de vie.
Les limites évoluent selon le palier du service cron de votre compte. Les logs sont conservés selon la fenêtre de rétention standard de Hoody Cron, après que l'entrée elle-même a expiré.
Un travail temporaire ne devrait pas laisser d'entrées crontab permanentes.
Les patterns que les développeurs sortent quand il leur faut une ligne cron à usage unique. Chacun laisse une trace. expires_at fait le ménage.
Un travail temporaire ne devrait pas laisser d'entrées crontab permanentes.