
Sesenta contenedores en un servidor
Un servidor bare-metal ejecuta decenas a cientos de contenedores Hoody. KSM y dedup BTRFS hacen que el costo marginal sea casi cero.
¿Persiguiendo un bug intermitente? Vuelca el árbol de procesos cada minuto durante 48 horas, y luego nunca más. Haz POST a una entrada de cron gestionada con expires_at fijado, y el horario tendrá vida media — sin recordatorio, sin PR de limpieza, sin entrada huérfana seis meses después.
{ "schedule": "* * * * *", "command": "pgrep auth | tee -a tree.log", "expires_at": "2026-05-06T11:14:00Z" }
POST /users/me/entries con expires_at — la entrada se ejecuta cada minuto y luego se elimina sola al llegar la fecha límite
Tres momentos. Crea la entrada con una fecha límite. El horario se ejecuta solo. Al llegar expires_at, la entrada se borra a sí misma — y tu crontab vuelve a estar como antes de empezar a depurar.
Envía una entrada de cron gestionada a la API con horario, comando y un timestamp expires_at a 48 horas vista. Recibes un id y la confirmación de que la entrada está activa.
La entrada se ejecuta en cada tick de su expresión cron — cada minuto, cada hora, lo que hayas configurado. Comportamiento idéntico al de una entrada permanente, con una diferencia silenciosa.
Cuando el reloj de pared cruza expires_at, la entrada se elimina. Sin ejecución final, sin fila zombi, sin limpieza manual. GET /entries devuelve la lista que habrías tenido sin ti.
Sin script de limpieza. Sin recordatorio en el calendario. Sin un hilo de equipo "¿quién es dueño de esto?" dentro de seis meses. La entrada sabía cuándo le tocaba morir y lo hizo.
Crea la entrada con un POST. Verifica que ya no está con un GET 49 horas después. Todo el mecanismo son dos llamadas HTTP y un timestamp — sin demonio cron al que entrar por SSH, sin /etc/crontab que editar.
# 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.
El campo expires_at es el contrato. No tienes que acordarte de limpiar porque acordarse no forma parte del protocolo — la fecha límite sí.
En cuanto el horario tiene fecha de caducidad, tres cosas dejan de ser problema tuyo: deriva, supervisión y fatiga de auditoría. El crontab se mantiene limpio por defecto.
Cada entrada "solo voy a poner esto temporalmente…" lleva fecha límite incorporada. El crontab se autopoda — sin barridos trimestrales de limpieza, sin filas obsoletas que nadie quiere borrar porque nadie sabe qué hacían.
No tienes que acordarte de quitar la entrada. No tienes que poner un recordatorio en el calendario. No tienes que abrir un PR de limpieza. La fecha límite es el recordatorio — y siempre dispara.
La entrada se fue, pero las ejecuciones no. Cada ejecución sigue teniendo su línea de log, su exit code y su timestamp — así que el rastro de "esto corrió 48 horas y luego paró" se puede reconstruir entero después.
Las entradas que expiran solas cuestan lo mismo que las permanentes. Apila tantas como necesites — la API se diseñó para el caso en que cada quien del equipo depurando tiene tres o cuatro jobs temporales corriendo a la vez.
Expresiones cron estándar, hasta resolución de un minuto. El campo expires_at acepta cualquier timestamp RFC 3339.
Espacio de sobra para un equipo de depuradores ejecutando un puñado de sondas temporales junto a los jobs permanentes.
Sin llamada DELETE que recordar. Sin ticket de "limpiar crons viejos" en el backlog. La entrada se ocupa de su propio fin de vida.
Los límites escalan con el tier del servicio cron de tu cuenta. Los logs se conservan según la ventana estándar de retención de Hoody Cron una vez que la entrada en sí ha expirado.
El trabajo temporal no debería dejar entradas permanentes en el crontab.
Los patrones a los que se recurre cuando hace falta una línea de cron de un solo uso. Cada uno deja rastro. expires_at lo barre.
El trabajo temporal no debería dejar entradas permanentes en el crontab.