Sintaxis
Formato Crontab
# ┌───── minuto (0-59) # │ ┌───── hora (0-23) # │ │ ┌───── día del mes (1-31) # │ │ │ ┌───── mes (1-12) # │ │ │ │ ┌───── día de la semana (0-7, 0&7=Dom) # * * * * * comando
Valores de Campo
*Cualquier valor (comodín)
,Lista de valores: 1,3,5
-Rango: 1-5
/Paso: */10 (cada 10)
0-59Rango de minutos
0-23Rango de horas
1-31Rango de día del mes
1-12Rango de mes (o ENE-DIC)
0-7Día de la semana (0&7=Dom, o DOM-SAB)
Cadenas Especiales
Horarios Abreviados
@rebootEjecutar una vez al inicio
@yearly0 0 1 1 * — una vez al año (1 de enero)
@monthly0 0 1 * * — una vez al mes (día 1)
@weekly0 0 * * 0 — una vez a la semana (domingo)
@daily0 0 * * * — una vez al día (medianoche)
@hourly0 * * * * — una vez por hora
Ejemplos
Horarios Comunes
30 2 * * * /usr/local/bin/backup.sh 0 9 * * 1-5 /opt/report.sh */15 * * * * /usr/bin/health-check.sh 0 0 1 * * /opt/monthly-cleanup.sh 0 8,17 * * * /opt/notify.sh
Desglose de Horarios
30 2 * * *Diariamente a las 2:30 AM
0 9 * * 1-5Días de semana a las 9:00 AM
*/15 * * * *Cada 15 minutos
0 0 1 * *Primer día del mes, medianoche
0 8,17 * * *Diariamente a las 8 AM y 5 PM
Entorno
Establecer Variables
SHELL=/bin/bash PATH=/usr/local/bin:/usr/bin:/bin [email protected] HOME=/home/deploy * * * * * /opt/myjob.sh
Notas de Entorno
SHELLShell para ejecutar comandos (por defecto /bin/sh)
PATHRuta de búsqueda (cron usa una mínima por defecto)
MAILTOEnviar salida a este correo (vacío = sin correo)
HOMEDirectorio home para el trabajo cron
Logging
Salida y Logging
# redirigir stdout + stderr a un archivo de log */5 * * * * /opt/job.sh >> /var/log/job.log 2>&1 # descartar toda la salida 0 3 * * * /opt/job.sh > /dev/null 2>&1 # registrar solo errores 0 3 * * * /opt/job.sh > /dev/null 2>> /var/log/job-err.log
Ver Logs de Cron
# Debian / Ubuntu (syslog) grep CRON /var/log/syslog # RHEL / CentOS cat /var/log/cron # journalctl (systemd) journalctl -u cron --since "1 hour ago"
Horarios Comunes
Patrones Cotidianos
0 * * * *Cada hora en punto
*/5 * * * *Cada 5 minutos
*/30 * * * *Cada 30 minutos
0 0 * * *Diariamente a medianoche
0 6 * * 1Cada lunes a las 6 AM
0 0 1,15 * *Días 1 y 15 del mes
0 0 * * 5Cada viernes a medianoche
0 0 1 1 *Cada 1 de enero
Comandos crontab
Gestionar Crontabs
crontab -e # editar tu crontab crontab -l # listar tu crontab crontab -r # eliminar tu crontab crontab -u alice -l # listar crontab de otro usuario (root) crontab /path/to/file # instalar crontab desde archivo
Ubicaciones de Crontab del Sistema
/etc/crontabCrontab del sistema (incluye campo de usuario)
/etc/cron.d/Archivos cron de complemento
/etc/cron.daily/Scripts ejecutados diariamente
/etc/cron.hourly/Scripts ejecutados cada hora
/etc/cron.weekly/Scripts ejecutados semanalmente
/etc/cron.monthly/Scripts ejecutados mensualmente
/var/spool/cron/Almacenamiento de crontab por usuario
Consejos
Buenas Prácticas
Usar rutas absolutasEl PATH de cron es mínimo; usar siempre rutas completas
Redirigir salidaEvitar desbordamiento de correos con > /dev/null 2>&1
Archivos de lockUsar flock para evitar ejecuciones superpuestas
Probar primeroEjecutar el comando manualmente antes de programarlo
Usar MAILTOConfigurar MAILTO="" para suprimir todo el correo
Verificar zona horariaCron usa la hora del sistema; verificar con date
Evitar Solapamiento con flock
# ejecutar solo si no está ya en ejecución * * * * * /usr/bin/flock -n /tmp/job.lock /opt/job.sh