Ejemplos de expresiones de Cron: 30 horarios explicados (con trampas)
Aprenda la sintaxis cron campo por campo y copie 30 expresiones cron probadas para cada N minutos, días laborables, trabajos mensuales, horas laborales y más, además de trampas de zona horaria.
· 6 min de lectura
Cron ha programado trabajos recurrentes en sistemas Unix desde la década de 1970, y su sintaxis de cinco campos ahora impulsa Kubernetes CronJobs, GitHub Actions, programadores en la nube como AWS EventBridge y Google Cloud Scheduler, tuberías CI e innumerables bibliotecas de trabajos. La sintaxis es lo suficientemente compacta para memorizar, pero lo suficientemente sutil que la mayoría de los ingenieros han enviado al menos un programa que se ejecutó en el momento equivocado. Esta guía explica cada campo, luego enumera 30 expresiones prácticas con notas sobre las trampas.
Los cinco campos
┌───────────── minute (0–59)
│ ┌─────────── hour (0–23)
│ │ ┌───────── day of month (1–31)
│ │ │ ┌─────── month (1–12 or JAN–DEC)
│ │ │ │ ┌───── day of week (0–6 or SUN–SAT; 7 is also Sunday on most systems)
│ │ │ │ │
* * * * *
Cada campo acepta:
*todos los valores.- Un número
5significa exactamente 5. - Una lista
1,15significa 1 y 15. - Un rango
9-17significa 9 a 17 incluidos. - Un paso
*/15significa cada quince valor a partir del mínimo;10-50/20significa 10, 30, 50.
Un trabajo se ejecuta cuando la hora actual coincide con todos los campos con una excepción importante que se cubre a continuación. Pegar cualquier expresión en un [cron expression parser] ((/tools/cron-parser) para ver una descripción en lenguaje sencillo y los próximos tiempos de ejecución.
Cada N minutos u horas
* * * * *cada minuto.*/5 * * * *cada 5 minutos (a las 00:00, 00:05, :10 ...).*/15 * * * *cada 15 minutos.0,30 * * * *cada media hora, a la hora y media.7 * * * *cada hora a los 7 minutos después. Elegir un minuto impar aleja la carga de las horas más ocupadas.0 */2 * * *cada 2 horas, a las 00:00, 02:00, 04:00 ...0 */6 * * *cuatro veces al día: 00:00, 06:00, 12:00, 18:00.15 8-18/2 * * *a las 08:15, 10:15, 12:15, 14:15, 16:15 y 18:15.
** Pitfall: ** los pasos se reinician en cada límite. */7 en el campo de minutos dispara a: 00,: 07 ...: 56 y luego: 00 de nuevo, por lo que la brecha a través de la hora es de 4 minutos, no 7. Si usted necesita un verdadero intervalo fijo que no divide 60, utilice un programador que admita intervalos o tenga el tiempo de verificación del trabajo transcurrido por sí mismo.
Horarios diarios
0 0 * * *todos los días a medianoche.30 2 * * *todos los días a las 02:30, una ventana de respaldo clásica.0 9,17 * * *a las 09:00 y a las 17:00 horas diarias.0 12 * * *al mediodía.45 23 * * *a las 23:45, justo antes de la medianoche para los informes de fin de día.
Pitfall: los trabajos entre las 01:00 y las 03:00 hora local pueden omitirse o ejecutarse dos veces en las transiciones de verano. Si su servidor utiliza una zona con hora de la mañana, programe trabajos críticos fuera de esa ventana o ejecute el servidor en UTC.
Días laborables y fines de semana
0 9 * * 1-509:00 de lunes a viernes.*/10 9-17 * * 1-5cada 10 minutos durante el horario comercial de los días laborables (última circulación a las 17:50).0 10 * * 6,010:00 los sábados y domingos.0 8 * * MON08:00 todos los lunes. Los nombres son insensibles a mayúsculas y minúsculas en la mayoría de las implementaciones.30 16 * * 5Viernes a las 16:30.
Mensual y anual
0 0 1 * *medianoche del primer día de cada mes.0 6 15 * *06:00 el día 15 de cada mes.0 0 1,15 * *el 1 y el 15, común para la nómina.0 0 1 1 *medianoche del 1 de enero.0 9 1 */3 *09:00 del primer día de cada trimestre (enero, abril, julio y octubre).0 0 L * *el último día del mes. Nota:Les una extensión soportada por Quartz, algunos programadores en la nube y algunas bibliotecas, pero no por el cron clásico de Unix.0 22 28-31 * *combinado con un control dentro del script ([ "$(date -d tomorrow +%d)" = "01" ]) una forma portátil de ejecutar el último día del mes con cron estándar.
¿Día del mes o día de la semana?
0 9 13 * 5mucha gente lee esto como "viernes 13". En cron clásico significa ** cada 13 del mes y cada viernes **. Cuando ambos campos de día están restringidos (tampoco lo es*), Vixie cron y sus descendientes ejecutan el trabajo cuando ** cualquiera ** coincide.
Para ejecutar sólo el viernes 13 de, programar 0 9 13 * * y comprobar el día de la semana en el guión, o utilizar un programador con explícita y semántica. Esta es la regla más sorprendente en cron y vale la pena recordar.
Cuerdas especiales
Muchas implementaciones de cron aceptan atajos:
@hourlyigual que0 * * * *.@dailyo@midnight0 0 * * *.@weekly—0 0 * * 0.@rebootuna vez al inicio (Unix cron sólo; no está disponible en Kubernetes o GitHub Actions).
Diferencias entre plataformas
- Kubernetes CronJobs utiliza una sintaxis estándar de cinco campos. Desde Kubernetes 1.27 se puede configurar
spec.timeZone: "Europe/Berlin"; de lo contrario, los horarios siguen la zona del administrador del controlador, que generalmente es UTC. - Los horarios de Acciones de GitHub siempre se ejecutan en UTC, pueden retrasarse durante períodos de alta carga, y el intervalo mínimo es de 5 minutos. Evita
0 * * * *si la precisión es importante, elige un minuto impar. - AWS EventBridge utiliza seis campos (
minute hour day-of-month month day-of-week year) y requiere?en uno de los dos campos de día. - **Quartz (Java) ** y Spring utilizan seis o siete campos con segundos primero:
0 0 9 * * MON-FRI. - Los temporizadores sistémicos utilizan una sintaxis diferente y más legible (
OnCalendar=Mon..Fri 09:00) y manejan las ejecuciones perdidas conPersistent=true.
Siempre confirme qué dialecto espera su plataforma antes de copiar una expresión.
Zonas horarias
Cron evalúa las expresiones en la zona horaria del programador. Un trabajo escrito como 0 9 * * * por un desarrollador en Tokio se ejecuta a las 09:00 UTC en un servidor UTC 18:00 en Tokio. Las recomendaciones:
- Ejecutar servidores y programadores en UTC, y convertir las horas locales previstas a UTC al escribir los horarios.
- Si un trabajo debe seguir el horario comercial local a través de los cambios del horario de verano, utilice un programador que admita zonas horarias explícitas.
- Registre la marca de tiempo de cada ejecución en UTC vea la Guía de marca de tiempo de Unix para saber por qué.
Hacer más sólidos los puestos de trabajo
El momento correcto es sólo la mitad de la batalla:
- Evitar superposiciones. Si un trabajo puede ejecutarse por más tiempo que su intervalo, use un bloqueo (
flocken Unix,concurrencyPolicy: Forbiden Kubernetes). - Hacer que los trabajos sean idempotentes. Un trabajo que se ejecute dos veces, por ejemplo después de una nueva tentativa o de una superposición de horas diurnas, no debe cobrar dos veces a los clientes.
- ** Captura de salida.** Clásicos correos electrónicos cron salida al usuario local, que por lo general no va a ninguna parte. Redirigir a los registros y alerta en caso de fallas.
- Utilice rutas absolutas. Cron se ejecuta con un entorno mínimo y
PATH; los scripts que funcionan en su shell a menudo fallan bajo cron. - Monitor para el silencio. Un servicio de latidos cardíacos que alerta cuando un trabajo no se registra detecta horarios rotos que de otro modo fallarían silenciosamente.
Resumen
Los cinco campos de Cron minuto, hora, día del mes, mes, día de la semana combinados con listas, rangos y pasos cubren casi todos los horarios recurrentes. Esté atento a la regla OR cuando ambos campos de día están configurados, pasos que se restablecen en los límites, DST alrededor de 01:0003:00, y dialectos de plataforma con campos adicionales. Verifique cada expresión con un analizador que muestra las próximas ejecuciones antes de implementarla.
Esta página se tradujo automáticamente del inglés. Si encuentras un error, avísanos.