107.2 - Comandos clave: Automatizacion de tareas

Formato del crontab

Crontab de usuario (5 campos + comando)

min  hora  dia  mes  dia_sem  comando
0-59 0-23  1-31 1-12 0-7      /ruta/script.sh

Crontab del sistema /etc/crontab (6 campos + comando)

min  hora  dia  mes  dia_sem  USUARIO  comando
0-59 0-23  1-31 1-12 0-7      root     /ruta/script.sh

Simbolos especiales en crontab

SimboloSignificadoEjemplo
*Cualquier valor* * * * * (cada minuto)
,Lista1,15,30 * * * *
-Rango1-5 * * * *
/Incremento*/15 * * * * (cada 15 min)

Atajos de crontab

CadenaEquivalenteSignificado
@reboot-Al arrancar
@yearly0 0 1 1 *1 de enero
@monthly0 0 1 * *Dia 1 de cada mes
@weekly0 0 * * 0Domingos
@daily0 0 * * *Medianoche
@hourly0 * * * *Cada hora

Ejemplos comunes de crontab

ProgramacionSignificado
30 2 * * *Diario a las 2:30 AM
0 8 * * 1-5Lunes a viernes a las 8:00
0 0 1 * *Dia 1 de cada mes a medianoche
*/15 * * * *Cada 15 minutos
0 3 * * 0Domingos a las 3:00 AM
0 */2 * * *Cada 2 horas

Gestion del crontab de usuario

ComandoDescripcion
crontab -eEditar crontab del usuario actual
crontab -lListar crontab del usuario actual
crontab -rEliminar crontab del usuario actual
crontab -e -u usuarioEditar crontab de otro usuario (root)
crontab -l -u usuarioListar crontab de otro usuario (root)

Archivos y directorios de cron

RutaDescripcion
/etc/crontabCrontab del sistema (con campo usuario)
/etc/cron.d/Crontabs adicionales del sistema (con campo usuario)
/etc/cron.hourly/Scripts ejecutados cada hora
/etc/cron.daily/Scripts ejecutados diariamente
/etc/cron.weekly/Scripts ejecutados semanalmente
/etc/cron.monthly/Scripts ejecutados mensualmente
/var/spool/cron/crontabs/Crontabs de usuarios (Debian)
/var/spool/cron/Crontabs de usuarios (Red Hat)

Control de acceso a cron

SituacionResultado
cron.allow existeSOLO los listados pueden usar cron
Solo cron.deny existeTodos EXCEPTO los listados
Ninguno existeDepende de distribucion (normalmente solo root)
Ambos existencron.allow tiene prioridad

Anacron

/etc/anacrontab

periodo  retardo  identificador  comando
1        5        cron.daily     run-parts /etc/cron.daily
7        25       cron.weekly    run-parts /etc/cron.weekly
@monthly 45       cron.monthly   run-parts /etc/cron.monthly
CampoDescripcion
periodoDias entre ejecuciones
retardoMinutos de espera antes de ejecutar
identificadorNombre unico (para registro en /var/spool/anacron/)
comandoComando a ejecutar
VariableDescripcion
RANDOM_DELAYRetardo aleatorio adicional (minutos)
START_HOURS_RANGERango de horas para ejecutar

at - Tareas unicas

ComandoDescripcion
at 15:00Programar tarea para las 15:00
at 02:30 tomorrowPara manana a las 2:30
at now + 2 hoursDentro de 2 horas
at now + 30 minutesDentro de 30 minutos
at now + 3 daysDentro de 3 dias
at 14:00 2026-12-25Fecha especifica
at -f archivo horaLeer comandos de archivo
atq / at -lListar tareas pendientes
atrm ID / at -d IDEliminar tarea por ID
batchEjecutar cuando carga < 0.8

Control de acceso a at

Misma logica que cron: /etc/at.allow y /etc/at.deny

Systemd timers

Opciones de programacion

OpcionDescripcionEjemplo
OnCalendarCalendariodaily, *-*-* 02:30:00
OnBootSecDespues de arranque15min
OnUnitActiveSecDesde ultima activacion1h
PersistentRecuperar ejecuciones perdidastrue

Gestion de timers

ComandoDescripcion
systemctl list-timersListar timers activos
systemctl list-timers --allListar todos los timers
systemctl enable nombre.timerHabilitar timer
systemctl start nombre.timerIniciar timer
systemctl status nombre.timerVer estado
systemd-analyze calendar "expresion"Verificar expresion de calendario

Estructura de archivos

/etc/systemd/system/nombre.timer    # Cuando ejecutar
/etc/systemd/system/nombre.service  # Que ejecutar