Cómo se lee una línea de crontab

Una expresión cron tiene cinco campos: minuto (0-59), hora (0-23), día del mes (1-31), mes (1-12) y día de la semana (0-7, donde 0 y 7 son domingo). El asterisco significa «cualquiera», la coma separa valores, el guion indica un rango y la barra un paso: */15 en los minutos significa 0, 15, 30 y 45.

Así, 0 9 * * 1-5 lanza la tarea a las 9:00 de lunes a viernes, 30 2 1 * * a las 2:30 del primer día de cada mes y */10 * * * * cada diez minutos. Las macros son abreviaturas: @daily equivale a 0 0 * * *, @hourly a 0 * * * * y @weekly a 0 0 * * 0.

Hay una excepción que sorprende a muchos: si tanto el día del mes como el día de la semana son distintos de *, cron ejecuta la tarea cuando se cumple cualquiera de los dos. 0 12 1 * 1 no significa «el día 1 si es lunes», sino «cada día 1 y cada lunes».

Errores frecuentes

  • Escribir * * * * * pensando en «una vez al día»: significa cada minuto.
  • Olvidar que cron usa la zona horaria del servidor, no la de quien mira: aquí las próximas ejecuciones están en la zona de tu navegador.
  • Esperar una tarea el día 31 de cada mes: en los meses de 30 días y en febrero simplemente no se ejecuta.

Preguntas frecuentes

¿Cron admite segundos?

El cron clásico no: la unidad mínima es el minuto. Algunos sistemas, como Quartz o Spring, añaden un sexto campo para los segundos, con otra sintaxis.

¿Qué pasa con el cambio de hora?

La noche en que se adelanta el reloj, una tarea a las 2:30 puede saltarse; cuando se atrasa, puede ejecutarse dos veces. Por eso las tareas importantes se programan fuera de la franja de 2 a 3 o en UTC.

¿Puedo usar los nombres de días y meses?

Sí: MON-FRI para los días y JAN-DEC para los meses, en inglés y sin distinguir mayúsculas y minúsculas.

Cómo funciona este cálculo

Cada campo se expande en el conjunto de valores permitidos: * es todo el rango, a-b un rango, x/n los valores desde x en pasos de n, y las listas separadas por comas se unen. En el día de la semana, el 7 pasa a ser 0 (domingo). Un día es válido si su mes está permitido y, cuando ambos campos de días están restringidos, si lo está el día del mes o el de la semana. Las próximas ejecuciones se buscan día a día, hasta ocho años, en la zona horaria del navegador.