Generador y explicador de expresiones cron
Crea una expresión cron o lee cualquiera explicada en lenguaje sencillo.
Acerca de esta herramienta
Elige con qué frecuencia debe ejecutarse una tarea para crear una expresión cron, o escribe una para obtener una descripción en lenguaje sencillo, el desglose de cada campo y las próximas ejecuciones en tu zona horaria. Admite rangos, listas, intervalos, nombres de meses y días, y atajos como @daily.
Cómo se usa
- Para leer una expresión, pégala en Explicar una expresión y léela en lenguaje sencillo.
- Para crear una, cambia a Crear una expresión y elige con qué frecuencia debe ejecutarse la tarea.
- Consulta las próximas ejecuciones, mostradas en tu zona horaria.
- Copia la expresión en tu crontab, en la configuración de CI o en tu planificador.
Preguntas
- ¿Qué significan los cinco campos?
- En orden: minuto (0–59), hora (0–23), día del mes (1–31), mes (1–12) y día de la semana (0–6; el domingo es 0 o 7). Un * significa cualquier valor.
- ¿Cómo ejecuto una tarea cada 5 minutos?
- Usa */5 * * * *. El /5 es un intervalo, que significa cada quinto valor de ese campo empezando por 0.
- ¿Y si indico tanto el día del mes como el día de la semana?
- En el cron clásico, la tarea se ejecuta cuando coincide cualquiera de los dos, no ambos. Así, 0 9 1 * MON se ejecuta a las 9:00 el día 1 de cada mes y todos los lunes.
- ¿Qué zona horaria usa cron?
- La zona horaria de la máquina o del servicio que lo ejecuta, que en servidores y en CI suele ser UTC. Las próximas ejecuciones se muestran aquí en tu hora local, así que haz la conversión si tu servidor usa UTC.
- ¿Cómo ejecuto una tarea cron cada 30 segundos?
- Cron no puede: su unidad más pequeña es un minuto. Una solución habitual es usar dos entradas, una que ejecuta el comando y otra que ejecuta sleep 30 seguido del comando. Para algo más preciso o frecuente, usa un temporizador de systemd o un proceso de larga duración con su propio bucle.
- ¿Cómo ejecuto una tarea el último día del mes?
- El cron estándar no tiene L. Programa la tarea para los días 28-31, como 0 23 28-31 * *, y empieza el comando comprobando que mañana es día 1, por ejemplo [ $(date -d tomorrow +\%d) = 01 ] && your-command, que necesita GNU date.
- ¿Qué significa @reboot en un crontab?
- @reboot ejecuta el comando una vez cuando se inicia el daemon de cron, normalmente justo después de arrancar la máquina. Lo admiten cronie y Vixie cron, pero no es una programación horaria, así que esta herramienta no puede mostrar sus próximas ejecuciones e indica un error. En máquinas con systemd, una unidad de servicio suele ser mejor opción.
¿Por qué no se ejecuta mi tarea cron?
Primero comprueba que cron ve la tarea. Ejecuta crontab -l con el mismo usuario y asegúrate de que el archivo termina con un salto de línea, porque algunas versiones de cron ignoran una última línea que no lo tenga. Después revisa la programación: pégala aquí y lee las próximas ejecuciones. Una sorpresa habitual es */45 en el campo de los minutos, que se ejecuta en :00 y :45 de cada hora, no cada 45 minutos.
Si la programación es correcta, lo que suele fallar es el entorno. Cron se ejecuta con un PATH mínimo y sin perfil de shell, así que los comandos que funcionan en tu terminal fallan con “command not found”. Usa rutas absolutas, define PATH al principio del crontab y envía la salida a un log con >> /tmp/job.log 2>&1 para poder ver los errores. Ten en cuenta también que % es especial en las líneas del crontab y hay que escaparlo como \%.
Sintaxis de cron explicada: rangos, listas, pasos y atajos
Cada campo acepta algo más que un solo número. Un rango como 9-17 coincide con todos los valores del 9 al 17, una lista como 1,15 coincide con cada valor de la lista y un paso como */15 coincide con uno de cada quince valores empezando por el mínimo del campo. Se pueden combinar: 0-30/10 en el campo de los minutos significa 0, 10, 20 y 30. Los campos del mes y del día de la semana también aceptan nombres como JAN o MON-FRI.
Los atajos sustituyen a una expresión completa: @hourly es 0 * * * *, @daily y @midnight son 0 0 * * *, @weekly es 0 0 * * 0, @monthly es 0 0 1 * * y @yearly o @annually es 0 0 1 1 *. En el campo del día de la semana, tanto 0 como 7 significan domingo. La tabla Campos de este explicador de expresiones cron muestra a qué valores se expande cada campo, y es la forma más rápida de comprobar una combinación complicada.
Crontab vs Kubernetes, GitHub Actions y Quartz: diferencias de cron
El formato de cinco campos es común al crontab de Linux, los CronJobs de Kubernetes y las programaciones de GitHub Actions, así que una expresión creada con este generador de cron funciona en los tres. GitHub Actions siempre usa UTC, se ejecuta como mucho cada 5 minutos y puede iniciar las tareas programadas con retraso cuando está saturado. Kubernetes usa la zona horaria del controlador a menos que definas spec.timeZone. Ninguno admite un campo de segundos.
Quartz, Spring y AWS EventBridge usan formatos más largos. Quartz y Spring añaden un campo de segundos al principio, y AWS añade un campo de año al final. Quartz y AWS también exigen ? en uno de los dos campos de día, y los tres admiten extras como L para el último día y # para el enésimo día de la semana. Esas expresiones se rechazan aquí, así que quita los campos adicionales y reescribe L o # a mano.
Expresiones cron habituales
Copia una de estas programaciones o pégala en la herramienta de arriba para ver sus próximas ejecuciones.
| Expresión | Significado |
|---|---|
* * * * * | Cada minuto |
*/5 * * * * | Cada 5 minutos |
*/15 * * * * | Cada 15 minutos |
0 * * * * | Cada hora |
0 */6 * * * | En punto, cada 6 horas |
0 0 * * * | A las 00:00 |
30 2 * * * | A las 02:30 |
0 9 * * 1-5 | A las 09:00, de lunes a viernes |
0 0 * * 0 | A las 00:00, sólo el domingo |
0 0 1 * * | A las 00:00, el día 1 del mes |
0 0 1 1 * | A las 00:00, el día 1 del mes, sólo en enero |
¿Algo no funciona o un resultado parece incorrecto? Informar de un problema con esta herramienta