Desarrollo · 4 min de lectura ·

Expresiones cron explicadas, con 10 ejemplos listos para usar

Cinco campos, cuatro símbolos y una trampa de zona horaria. Aprende a leer y escribir programaciones cron con ejemplos para copiar.

Cron es el planificador detrás de copias de seguridad, informes y tareas de limpieza en servidores de todo el mundo, y su sintaxis también aparece en GitHub Actions, los CronJobs de Kubernetes y la mayoría de los planificadores en la nube. Una programación son cinco campos separados por espacios.

┌ minuto (0-59)
│ ┌ hora (0-23)
│ │ ┌ día del mes (1-31)
│ │ │ ┌ mes (1-12)
│ │ │ │ ┌ día de la semana (0-6, 0 = domingo)
* * * * *

Cuatro símbolos

* significa cualquier valor. Una coma forma una lista (1,15), un guion un rango (1-5) y una barra un intervalo (*/15 = cada 15 unidades). Con estos cuatro se cubren casi todas las programaciones.

10 ejemplos

*/5 * * * *       cada 5 minutos
0 * * * *         cada hora en punto
0 9 * * *         todos los días a las 09:00
30 2 * * *        todas las noches a las 02:30
0 9 * * 1-5       de lunes a viernes a las 09:00
0 18 * * 5        los viernes a las 18:00
0 0 1 * *         a medianoche el día 1 de cada mes
0 0 1 1 *         una vez al año, el 1 de enero
0 */6 * * *       cada 6 horas
15 8,12,17 * * *  a las 08:15, 12:15 y 17:15 cada día

Trampa 1: día del mes y día de la semana

Cuando ambos campos están restringidos, el cron clásico ejecuta la tarea si coincide cualquiera de los dos. 0 0 1 * 1 se ejecuta el día 1 de cada mes y también todos los lunes, no solo los lunes que caen en día 1.

Trampa 2: la zona horaria

Cron no tiene zona horaria propia. La tarea se ejecuta en la zona horaria de la máquina o del servicio, que a menudo es UTC. Una tarea con 0 9 * * * en un servidor UTC se ejecuta a las 09:00 UTC, que pueden ser varias horas antes o después en tu zona, y el horario de verano puede moverla otra vez.

Trampa 3: ejecuciones solapadas y perdidas

Cron lanza una tarea a su hora tanto si la ejecución anterior ha terminado como si no. Una copia de seguridad programada cada 5 minutos que tarda 7 acaba ejecutándose dos veces a la vez. Envuelve las tareas largas en un bloqueo (en Linux, flock lo hace en una línea) o haz que sea seguro ejecutarlas en paralelo. Cron tampoco recupera lo perdido: si la máquina está apagada a las 02:30, la tarea de las 02:30 simplemente no se ejecuta esa noche.

*/5 * * * *  flock -n /tmp/backup.lock /usr/local/bin/backup.sh

Atajos y pequeñas diferencias

Muchas implementaciones de cron aceptan atajos como @hourly, @daily, @weekly, @monthly y @reboot en lugar de cinco campos. En la mayoría, el domingo puede escribirse como 0 o como 7, y se permiten nombres como MON o JAN. Las plataformas difieren en los detalles, así que consulta la documentación del sistema que ejecutará la tarea, sobre todo en programadores gestionados en la nube.

¿Adónde va la salida?

Por defecto, cron envía por correo la salida de la tarea al usuario local, lo que en la mayoría de los servidores significa que se pierde. Redirige la salida a un archivo de registro o a tu sistema de logs, para que una tarea que falla deje rastro:

30 2 * * *  /usr/local/bin/report.sh >> /var/log/report.log 2>&1

Compruébalo antes de desplegar

Pega una expresión en el explicador de expresiones cron de 4Dev y te leerá la programación en lenguaje claro. Admite el formato estándar de cinco campos; las expresiones de seis o siete campos con segundos o años, como las de Quartz o Spring, se rechazan con un error.

Abrir el explicador de expresiones cron

LinkedInXFacebook