Tu tarea hace ping a una URL cuando termina. El silencio más allá de su plazo es un fallo — y si le das a okokumo la línea de crontab, el plazo sigue la programación real en lugar de un intervalo fijo.
Una tarea cron que se cae con estruendo se nota. Una tarea cron que deja de programarse — la entrada de crontab perdida en una migración de servidor, el contenedor que ya no arranca, el worker de la cola que se llevó el OOM killer — no produce error, ni correo, ni línea de log. Simplemente no vuelve a ejecutarse, y te enteras cuando alguien pregunta por qué no salieron las facturas.
La monitorización heartbeat invierte una comprobación HTTP. En lugar de que okokumo consulte tu servicio, es tu tarea la que llama a una URL de ping única tras cada ejecución correcta. Si se pasa la ventana, okokumo da la alarma — porque la ausencia de señal es la señal.
La forma sencilla es un periodo más un margen de gracia: "espera un ping cada hora, permite diez minutos de holgura". Eso funciona hasta que la programación deja de ser uniforme.
0 3 * * 1-5 — las 3 en días laborables — son 24 horas entre lunes y martes y 72 horas entre
viernes y lunes. Un intervalo fijo no puede describir eso. Ponlo en 24 horas y te avisa cada
sábado por la mañana; ponlo en 72 y una tarea que se detuvo en silencio el martes pasa
desapercibida hasta el viernes.
Por eso una comprobación cron puede tomar la propia expresión crontab, más la zona horaria IANA en la que corre la crontab de tu servidor. El plazo pasa a ser la siguiente ejecución programada más el margen de gracia, recalculado tras cada ping. Una tarea de solo días laborables permanece en silencio todo el fin de semana, y una ejecución omitida el martes se detecta dentro de su propia ventana de gracia.
Una crontab se dispara en la hora local de su host. Un desplazamiento UTC fijo se desvía una hora en cada cambio de horario de verano, y se desvía hacia la falsa alarma — las 03:00 en París son las 01:00 UTC en invierno y las 02:00 UTC en verano. Cada comprobación lleva su propia zona, así que servidores en regiones distintas no tienen que ponerse de acuerdo.
El formulario lista las siguientes ejecuciones mientras escribes, cada una con su desplazamiento. Una expresión cron es fácil de equivocar de forma sutil — los campos día-del-mes y día-de-la-semana se combinan con OR, no con AND, lo que sorprende a casi todo el mundo una vez — y aquí una programación equivocada significa un aviso perdido, no un defecto cosmético.
Cómo funciona el planificador →
Una petición HTTP al final de tu tarea, desde cualquier cosa capaz de hacerla:
curl al final de un script de shell o de un entrypoint de Docker.Haz el ping después de que el trabajo salga bien, no al principio del script. Una tarea que arranca, falla y hace ping igualmente es una tarea que se declara sana mientras no hace nada.
El intervalo mínimo de tu plan se comprueba contra el hueco más estrecho que la expresión
produce realmente, muestreado sobre sus siguientes cincuenta ocurrencias en lugar de deducido.
Así * * * * * se rechaza en Free igual que un intervalo de 60 segundos, y una programación
irregular no necesita ningún caso especial.
Correo, Telegram, Slack, Discord o un webhook firmado; enrutado por comprobación o un valor por defecto de la organización; un registro de entregas que muestra qué se envió y qué se omitió. Cómo funcionan las alertas →