CronDrive
Guías

Formato de crontab: los cinco campos y sus caracteres especiales

Actualizada el 26 de octubre de 2026

En el crontab de un usuario, el que editas con crontab -e, cada job es una línea con un horario de cinco campos, separados por espacios, y después el comando que se ejecuta:

# ┌───────── minuto (0-59)
# │ ┌─────── hora (0-23)
# │ │ ┌───── día del mes (1-31)
# │ │ │ ┌─── mes (1-12)
# │ │ │ │ ┌─ día de la semana (0-7, el domingo es 0 o 7)
# │ │ │ │ │
  0 2 * * * /ruta/a/respaldo.sh

Esta línea ejecuta respaldo.sh todos los días a las 2:00: minuto 0, hora 2, cualquier día del mes, cualquier mes y cualquier día de la semana. Las horas son las de la zona horaria del servidor, que puede no ser la tuya (mira cron y las zonas horarias).

Los caracteres especiales

  • *, cualquier valor. * en el campo de la hora significa cada hora.
  • , separa una lista. 0,30 en el campo del minuto se ejecuta en el minuto 0 y en el 30.
  • - indica un rango. 1-5 en el día de la semana se ejecuta de lunes a viernes.
  • / indica un paso. */15 en el campo del minuto se ejecuta en los minutos 0, 15, 30 y 45. También sirve con un rango: 0-30/10 es 0, 10, 20 y 30.
  • Nombres. Los meses y los días de la semana también aceptan sus tres primeras letras en inglés, como JAN o MON. Algunas implementaciones no los aceptan en rangos ni listas, así que los números son la opción más segura.

El paso se cuenta dentro de su campo, desde el inicio del rango, y vuelve a empezar en la hora, el día o el mes siguiente. 0 */7 * * * se ejecuta a las 0:00, 7:00, 14:00 y 21:00, y al día siguiente otra vez a las 0:00: tres horas después de la última ejecución, no siete. Del mismo modo, */5 en el día del mes se ejecuta los días 1, 6, 11, 16, 21, 26 y 31, y después el día 1 del mes siguiente.

El día del mes y el día de la semana

Cuando los dos días están restringidos, cron ejecuta el job cuando coincide cualquiera de los dos, no cuando coinciden ambos. 0 0 13 * 5 se ejecuta todos los días 13 y todos los viernes, no solo los viernes 13. Para ejecutarlo un día de la semana solo dentro de algunos días del mes, restringe uno de los dos en el horario y comprueba el otro en el comando:

0 0 1-7 * * [ "$(date +\%u)" = 1 ] && /ruta/a/job.sh

Esa línea se ejecuta el primer lunes del mes: todos los días del 1 al 7, el comando comprueba que sea lunes (date +%u da del 1 al 7, desde el lunes). El % se escribe \% por lo que viene a continuación.

El comando

  • Cron lo ejecuta con /bin/sh, no con tu shell, y con un PATH corto. Usa rutas absolutas, o define SHELL y PATH al principio del crontab (mira por qué tu cron job no se ejecuta).
  • % es un salto de línea para cron: lo que va después del primer % pasa a la entrada del comando. Escribe \% para un % en el comando, como en date +\%F.
  • La salida se envía por email al usuario del crontab, o a la dirección de MAILTO. Si el servidor no envía emails, redirígela a un archivo: >> /var/log/job.log 2>&1.

Las otras líneas de un crontab

  • Las líneas que empiezan con # son comentarios.

  • Las variables, como PATH=/usr/local/bin:/usr/bin:/bin, SHELL=/bin/bash o MAILTO=tu@ejemplo.com, se aplican a las líneas que están debajo. Algunas implementaciones, como cronie, también aceptan CRON_TZ para la zona horaria de los horarios.

  • En /etc/crontab y /etc/cron.d/, cada línea tiene un sexto campo, con el usuario que ejecuta el comando, antes del comando:

    0 2 * * * root /usr/local/bin/respaldo.sh

Las macros

En lugar de los cinco campos, una línea puede empezar con una de estas:

  • @hourly es 0 * * * *.
  • @daily, o @midnight, es 0 0 * * *.
  • @weekly es 0 0 * * 0, el domingo.
  • @monthly es 0 0 1 * *.
  • @yearly, o @annually, es 0 0 1 1 *.
  • @reboot ejecuta el comando una vez cuando cron se inicia, normalmente al arrancar el servidor.

Ejemplos

Estas expresiones son solo el horario: el comando va después.

No es crontab: segundos y otros formatos

Crontab no tiene un campo para los segundos, así que una línea se ejecuta como mucho una vez por minuto (mira cómo ejecutar un cron job cada pocos segundos). Algunos programadores usan otros formatos:

  • Spring y Quartz agregan los segundos como primer campo, y Quartz un séptimo campo con el año. Quartz cuenta los días de la semana desde el domingo como 1.
  • AWS, en las reglas de EventBridge, escribe cron(0 2 * * ? *): los cinco campos, con un ? en uno de los días, y el año al final. Esas reglas se ejecutan en UTC.
  • El CronJob de Kubernetes y GitHub Actions usan los cinco campos de crontab. GitHub Actions los lee en UTC por defecto.

El probador de cron los entiende todos, dice qué significan y da la expresión de crontab que se ejecuta en los mismos minutos.

Compruébalo antes de guardar

Un error en el horario no aparece como un error: el job simplemente se ejecuta a otra hora, o nunca. Pega la expresión en el probador de cron para ver sus próximas ejecuciones en la zona horaria de tu servidor, y configura una alerta para el día en que el job no se ejecute cuando debía.

CronDrive te avisa por email, o en Slack, cuando un job con este horario falla, o no se inicia o no termina a tiempo. Gratis hasta 15 jobs.

Lo que verías con este horario

Un ejemplo con las últimas ejecuciones de este horario y resultados inventados: una falló y otra no se ejecutó.

Horas en UTC.

Hora
lun 26 oct, 02:00 A tiempo Inició 02:00, terminó 02:13, duró 13 min.
dom 25 oct, 02:00 No se ejecutó Alertas enviadas a las 02:05 y 02:30.
sáb 24 oct, 02:00 A tiempo Inició 02:00, terminó 02:14, duró 14 min.
vie 23 oct, 02:00 Falló con código 1 Alerta enviada a las 02:04. Inició 02:00, terminó 02:04, duró 4 min.
jue 22 oct, 02:00 A tiempo Inició 02:00, terminó 02:13, duró 13 min.
mié 21 oct, 02:00 A tiempo Inició 02:00, terminó 02:14, duró 14 min.

La alerta de la ejecución que falló

Email de CronDrive, vie 23 oct, 02:04

Falló (código 1): "Tu job"

El job "Tu job" falló con el código de salida 1.

Si conectas Slack, el mismo mensaje llega a tu canal.

El cambio en tu crontab

0 2 * * * curl -fsS -m 10 https://job.crondrive.com/uG2Exw/start/$$; /path/to/job.sh; curl -fsS -m 10 https://job.crondrive.com/uG2Exw/end/$?/$$

Dos llamadas alrededor de tu comando, en la misma línea. La línea de tu job trae su propio token.

Monitorear este horario