
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.
L'export horaire des métriques échoue depuis trois jours. Vous êtes d'astreinte ce soir. Faites un PATCH sur l'entrée cron managée avec enabled:false — la planification, la commande, le commentaire restent tous en place. La tâche est dans un état défini : présente et muette, en attendant que quelqu'un la corrige.
{ "enabled": false, "comment": "reindex flaking — see thread" }
le bouton n'est qu'un PATCH · l'entrée ne quitte jamais la liste
Les entrées managées de Hoody Cron sont une ressource JSON : chaque ligne possède un id, une planification, une commande, un commentaire et un drapeau enabled. Faire passer enabled à false, c'est un seul PATCH. L'entrée reste dans la crontab pour que la personne suivante puisse la lire et décider quoi faire.
# mute the flaky entry — entry stays in the crontab curl -X PATCH \ https://cron.containers.hoody.com/users/me/entries/e7d3 \ -H "Content-Type: application/json" \ -d '["enabled": false, "comment": "flaking on monday with prod-db — see #pager"]' # response HTTP/1.1 200 OK { "id":"e7d3", "enabled":false, "schedule":"0 * * * *", "command":"/srv/cron/metrics-export.sh", ... }
# the entry is still on the list — just not running curl GET https://cron.containers.hoody.com/users/me/entries HTTP/1.1 200 OK [ { "id":"a1f2", "enabled":true, ... }, { "id":"e7d3", "enabled":false, "comment":"flaking — see #pager" }, { "id":"9b21", "enabled":true, ... } ] # present and muted — the on-call hand-off has somewhere to point
Le PATCH ne supprime, ne réécrit, ni ne déplace l'entrée — il bascule un seul booléen. La passation tient en une ligne : « l'entrée metrics-export e7d3 est muette, voir hoody-cron, regardez s'il vous plaît. »
Une entrée dans une crontab Hoody est toujours dans exactement l'un des trois états. Chaque état a des conséquences différentes sur ce que l'équipe saura demain matin.
L'entrée est dans la crontab et le démon cron du noyau la prend toutes les heures. Les échecs réveillent l'astreinte. C'est l'état par défaut pour les tâches saines.
enabled:false. L'entrée est toujours dans la crontab, l'équipe peut donc lire sa planification, sa commande et son commentaire. Le démon cron la saute. Pas d'alerte à 2h du matin demain, personne n'oublie qu'elle existe.
Une fois que vous faites DELETE, la planification, la commande, le commentaire, la raison — tout quitte la crontab. Le prochain astreint n'a plus rien à grep. Mettre en sourdine est le choix qui préserve la mémoire.
Mute est l'état intermédiaire que la plupart des planificateurs n'ont pas nommé. Hoody Cron, si — parce que enabled est un champ de premier rang sur l'entrée managée.
Quand vous ne pouvez pas réparer une tâche ce soir, la question est : quelle forme prendra son absence demain. Le mute rend cette forme lisible.
Au lieu de coller un fil Slack ou une PR avec une ligne supprimée, le message est l'id de l'entrée. L'astreinte du lendemain ouvre l'URL cron, lit le commentaire, et sait par où commencer.
GET /entries renvoie enabled:false avec le commentaire. Construisez un panneau d'audit en filtrant. Qui l'a mis en sourdine, pourquoi, et depuis combien de temps : tout est dans le JSON, pas dans les DM de quelqu'un.
Une fois le problème de fond corrigé, un PATCH de plus avec enabled:true remet l'entrée sur la planification. Pas de réécriture de l'expression cron, pas de risque de coquille, pas de cycle commit-and-deploy.
Les chiffres viennent de la surface managed-entries de Hoody Cron, pas de benchmarks inventés.
PATCH /users/[user]/entries/[id] accepte un corps partiel. Envoyez ["enabled":false] seul — la planification, la commande et le commentaire ne sont pas touchés.
La planification à cinq champs, la commande, le commentaire, expires_at et l'id persistent tous à travers la mise en sourdine. La crontab du noyau reflète encore l'entrée — simplement commentée par le service cron.
Pas d'édition de fichier, pas de PR, pas de déploiement. L'aller-retour de mute est un seul appel HTTP depuis n'importe quel terminal, y compris celui de votre téléphone.
Selon l'API Managed Entries de Hoody Cron : chaque entrée porte un booléen enabled à côté de la planification, la commande, le commentaire et un éventuel expires_at. PATCH accepte des corps partiels.
Désactivée n'est pas supprimée — l'entrée attend que quelqu'un la corrige.
Les manières habituelles dont les équipes « parquent temporairement » une ligne cron instable. Chacune est soit destructive, soit lossy, soit à deux PR de la production.
Arrêtez de supprimer les tâches instables à 2h du matin. Mettez-les en sourdine, laissez une note, et laissez l'astreinte de demain lire le JSON.