Automatización de tareas: cron, at, systemd.timer
Introducción
Linux ofrece varias herramientas para ejecutar tareas de forma automática en un momento determinado o de
forma periódica: cron para tareas recurrentes, at para tareas puntuales programadas
y systemd.timer como alternativa moderna a cron.
cron — Tareas periódicas
El demonio cron ejecuta comandos de forma periódica según la configuración definida en los
crontabs.
Editar el crontab del usuario actual:
$ crontab -e # editar
$ crontab -l # listar
$ crontab -r # eliminar todo el crontab
Formato de una línea de crontab:
# minuto hora día_mes mes día_semana comando
* * * * * /ruta/al/script.sh
0 2 * * * /usr/local/bin/backup.sh # cada día a las 2:00
*/5 * * * * /usr/local/bin/check.sh # cada 5 minutos
0 8 * * 1 /usr/local/bin/report.sh # lunes a las 8:00
30 23 1 * * /usr/local/bin/monthly.sh # día 1 de cada mes a las 23:30
Campos y valores:
- minuto: 0-59
- hora: 0-23
- día del mes: 1-31
- mes: 1-12
- día de la semana: 0-7 (0 y 7 = domingo)
*→ cualquier valor*/n→ cada n unidadesa,b→ valores concretosa-b→ rango
Atajos predefinidos:
@reboot # al arrancar el sistema
@hourly # cada hora
@daily # cada día a medianoche
@weekly # cada domingo a medianoche
@monthly # el día 1 de cada mes a medianoche
Crontab del sistema:
Los archivos en /etc/cron.d/, /etc/cron.daily/, /etc/cron.hourly/,
/etc/cron.weekly/ y /etc/cron.monthly/ permiten configurar tareas a nivel de sistema.
El crontab global del sistema está en /etc/crontab e incluye una columna adicional con el usuario que
ejecuta el comando.
# /etc/crontab
0 2 * * * root /usr/local/bin/backup.sh
at — Tarea puntual programada
Permite ejecutar un comando una sola vez en un momento futuro específico. Es ideal para tareas que no se repiten.
Uso básico:
$ at 15:30 # ejecutar a las 15:30 de hoy
$ at 15:30 tomorrow # mañana a las 15:30
$ at 15:30 Jul 20 # el 20 de julio a las 15:30
$ at now + 2 hours # dentro de 2 horas
$ at now + 30 minutes
Tras escribir la hora, se abre un prompt donde se introduce el comando. Se termina con Ctrl+D.
$ at now + 1 hour
at> /usr/local/bin/backup.sh
at> <Ctrl+D>
job 3 at Mon Jan 01 16:00:00 2025
Gestión de trabajos at:
$ atq # listar trabajos pendientes
$ atrm 3 # eliminar el trabajo número 3
$ at -c 3 # ver el contenido del trabajo 3
Control de acceso:
/etc/at.allow→ usuarios que pueden usarat/etc/at.deny→ usuarios que no pueden usarat
Comparativa: cron vs at vs systemd.timer
Herramienta Uso principal Ventaja
cron Tareas periódicas (recurrentes) Simple, universal
at Tarea puntual futura Ejecución única
systemd.timer Tareas periódicas o puntuales Integrado en systemd, logs con journalctl, más opciones
Para nuevas instalaciones modernas se recomienda usar systemd.timer por su mejor integración con el
sistema (logs, dependencias, control preciso). cron sigue siendo válido y está presente en todos los
sistemas.