Una expresión cron consta de cinco campos separados por espacios que indican cuándo se ejecuta una tarea; en una línea del crontab, el comando va a continuación. Las próximas ejecuciones de los ejemplos se calcularon con un pequeño script que implementa las reglas de Vixie cron, a partir del sábado 10 de octubre de 2026 a las 12:00. Pegue expresiones numéricas en el explicador de expresiones cron para verlas en lenguaje llano.
Los cinco campos
┌───────────── minute 0-59
│ ┌─────────── hour 0-23
│ │ ┌───────── day of month 1-31
│ │ │ ┌─────── month 1-12 or jan-dec
│ │ │ │ ┌───── day of week 0-7 or sun-sat (0 and 7 are both Sunday)
│ │ │ │ │
* * * * * /path/to/command
En orden: minuto, hora, día del mes, mes y día de la semana (el domingo es 0 o 7).
Caracteres especiales
| Carácter | Significado | Ejemplo | Se lee como |
|---|---|---|---|
* |
Todos los valores | * * * * * |
Cada minuto |
, |
Lista | 0 9,17 * * * |
A las 09:00 y a las 17:00 |
- |
Rango (inclusivo) | 0 9 * * 1-5 |
09:00 de lunes a viernes |
/ |
Paso | */15 * * * * |
Cada 15 minutos (:00, :15, :30, :45) |
a-b/n |
Paso dentro de un rango | 0 8-18/2 * * * |
08:00, 10:00 ... 18:00 |
| nombres | Nombres de mes o de día en inglés, sin distinguir mayúsculas (el cron clásico de Vixie solo admite nombres sueltos, no listas ni rangos de nombres) | 0 4 * * sun |
04:00 los domingos |
Los pasos cuentan desde el inicio del rango, no desde el reloj: */7 en el campo de minutos se dispara en :00, :07 ... :56 y vuelve a hacerlo en :00, es decir, con un intervalo de 4 minutos.
Atajos
| Atajo | Equivale a | Se ejecuta |
|---|---|---|
@reboot |
(ninguno) | Una vez, cuando arranca el demonio de cron |
@yearly, @annually |
0 0 1 1 * |
A medianoche del 1 de enero |
@monthly |
0 0 1 * * |
A medianoche del día 1 |
@weekly |
0 0 * * 0 |
A medianoche entre el sábado y el domingo |
@daily, @midnight |
0 0 * * * |
Cada medianoche |
@hourly |
0 * * * * |
En el minuto 0 de cada hora |
Ejemplos resueltos
| Expresión | Significado | Próximas ejecuciones desde el sáb 10-10-2026 12:00 |
|---|---|---|
*/15 * * * * |
Cada 15 minutos | 12:15, 12:30, 12:45, 13:00 |
0 * * * * |
Cada hora en punto | 13:00, 14:00, 15:00 |
0 */6 * * * |
Cada 6 horas | sáb 18:00, dom 00:00, dom 06:00 |
0 9 * * 1-5 |
09:00 en días laborables | lun 12 oct, mar 13 oct, mié 14 oct |
*/10 9-17 * * 1-5 |
Cada 10 minutos en horario de oficina | lun 12 oct 09:00, 09:10, 09:20 |
0 22 * * 1-5 |
22:00 de lunes a viernes | lun 12 oct, mar 13 oct |
30 2 * * 0 |
02:30 todos los domingos | dom 11 oct, dom 18 oct, dom 25 oct |
0 0 * * 6,0 |
Medianoche en fin de semana | dom 11 oct, sáb 17 oct, dom 18 oct |
0 12 1,15 * * |
Mediodía los días 1 y 15 | jue 15 oct, dom 1 nov, dom 15 nov |
0 0 1 * * |
Medianoche del día 1 de cada mes | dom 1 nov, mar 1 dic, vie 1 ene 2027 |
0 0 1 1,7 * |
Dos veces al año | vie 1 ene 2027, jue 1 jul 2027 |
0 0 29 2 * |
Solo el 29 de febrero | mar 29 feb 2028, dom 29 feb 2032 |
0 0 13 * 5 |
El día 13 o cualquier viernes | mar 13 oct, vie 16 oct, vie 23 oct |
Vixie cron frente a Quartz
Linux y macOS usan Vixie cron o sus descendientes (cronie, el cron de Debian). El planificador Quartz de Java, y las herramientas basadas en él, usan un formato parecido pero que no es intercambiable.
| Característica | Vixie / cron estándar | Quartz |
|---|---|---|
| Campos | 5: minuto hora día mes día-semana | 6 o 7: segundo minuto hora día mes día-semana [año] |
| Números del día de la semana | 0-7, domingo = 0 o 7 |
1-7, domingo = 1 |
| Ambos campos de día definidos | Se ejecuta si coincide cualquiera | No permitido: uno de ellos debe ser ? |
? |
No admitido | «Sin valor concreto» en día del mes o día de la semana |
L |
No admitido | Último: L en día del mes = último día, 6L = último viernes |
W |
No admitido | Día laborable más cercano: 15W |
# |
No admitido | N-ésimo día de la semana: 6#3 = tercer viernes |
| Atajos | @daily y similares |
No admitidos |
| Días laborables a las 09:00 | 0 9 * * 1-5 |
0 0 9 ? * MON-FRI |
Algunas bibliotecas (como croniter y muchos planificadores de CI) aceptan también L y # en expresiones de cinco campos, pero los demonios cron simples no; compruébelo antes de depender de ello.
Consejos para el crontab
- Edite con
crontab -ey liste concrontab -l. Los crontabs del sistema, en/etc/crontaby/etc/cron.d/, llevan un campo de usuario adicional antes del comando. - Use rutas completas. Cron se ejecuta con un
PATHmínimo y sin shell de inicio de sesión. - Escape el
%. En una línea de crontab, un%sin escapar termina el comando y empieza su entrada estándar: escribadate +\%F. - Conserve la salida. Añada
>> /var/log/job.log 2>&1o definaMAILTO=para recibirla por correo. - Tenga en cuenta la zona horaria. Convierta un horario a otra región con la calculadora de zonas horarias.