Qué significa una expresión cron
Una expresión cron estándar tiene cinco campos separados por espacios: minuto, hora, día del mes, mes y día de la semana. Un asterisco significa todos los valores, una coma separa una lista (1,15), un guion marca un rango (9-17) y una barra indica un paso (*/15 es cada 15 minutos). Así, 30 2 * * 1-5 se ejecuta a las 2:30 de la madrugada de lunes a viernes.
Pega cualquier expresión y la herramienta la describe en una frase, muestra cada campo por separado y calcula las próximas diez ejecuciones. También entiende atajos como @daily y @hourly. Si algo está mal, el mensaje indica el campo y la posición en lugar de un error de sintaxis vago.
Trampas que pillan incluso a los expertos
Cuando están definidos tanto el día del mes como el día de la semana, el cron clásico se ejecuta los días que cumplen cualquiera de los dos, no ambos: 0 0 13 * 5 se ejecuta cada día 13 y además cada viernes. Si uno de los dos campos empieza por asterisco, como en */2, deben cumplirse los dos. La explicación lo avisa siempre que ocurre.
Cron usa la zona horaria de la máquina en la que se ejecuta. Una tarea a las 2:30 no se ejecuta la noche en que los relojes se adelantan en muchos países, y una tarea a la 1:30 puede encontrarse dos veces con la misma hora cuando se atrasan. Elige la zona horaria de tu servidor en la lista de ejecuciones para ver exactamente qué días se ven afectados. Los meses sin día 31 simplemente se saltan.
Estándar, con segundos y Quartz
El crontab de Linux, los CronJobs de Kubernetes y GitHub Actions usan la forma de cinco campos. Algunas bibliotecas añaden un campo de segundos delante. Quartz, que usan muchos programadores de tareas en Java, tiene segundos y un año opcional, numera los días de la semana del 1 al 7 empezando por el domingo y exige ? en uno de los campos de día. Además añade L para el último día, W para el día laborable más cercano y # para el enésimo día de la semana del mes. Elige la sintaxis arriba; al cambiarla, la expresión se convierte cuando es posible.