tareas programadas crontabs
Tareas programadas (Crontabs)
Section titled “Tareas programadas (Crontabs)”cron y crontab
Section titled “cron y crontab”cron ejecuta tareas de forma recurrente según un horario definido.
crontab -l # ver las tareas programadas del usuario actualcrontab -e # editar las tareas programadas del usuario actualcrontab -r # borrar TODAS las tareas del usuario actual (sin confirmación)sudo crontab -u usuario -l # ver las tareas de otro usuario (requiere privilegios)Formato de una línea de crontab
Section titled “Formato de una línea de crontab”* * * * * comando_a_ejecutar│ │ │ │ ││ │ │ │ └── día de la semana (0-7, 0 y 7 son domingo)│ │ │ └───── mes (1-12)│ │ └──────── día del mes (1-31)│ └─────────── hora (0-23)└────────────── minuto (0-59)Ejemplos
Section titled “Ejemplos”# Cada día a las 3:00 AM0 3 * * * /home/pyrhos/scripts/backup.sh
# Cada 15 minutos*/15 * * * * /home/pyrhos/scripts/check.sh
# Cada lunes a las 9:000 9 * * 1 /home/pyrhos/scripts/reporte_semanal.sh
# El día 1 de cada mes a medianoche0 0 1 * * /home/pyrhos/scripts/mensual.sh
# De lunes a viernes a las 8:000 8 * * 1-5 /home/pyrhos/scripts/laborable.sh{% hint style=“warning” %}
Cron ejecuta los scripts con un entorno mínimo, sin cargar .bashrc ni heredar el $PATH de tu sesión interactiva. Usar siempre rutas absolutas dentro del script (/usr/bin/python3 en vez de python3) y redirigir la salida a un log para poder depurar fallos (>> /var/log/mi_tarea.log 2>&1).
{% endhint %}
cron a nivel de sistema
Section titled “cron a nivel de sistema”/etc/crontab # crontab global del sistema (incluye columna de usuario)/etc/cron.d/ # ficheros de crontab adicionales, uno por servicio/paquete/etc/cron.daily/ # scripts ejecutados una vez al día/etc/cron.hourly/ # scripts ejecutados una vez a la hora/etc/cron.weekly/ # scripts ejecutados una vez a la semanaAtajos especiales
Section titled “Atajos especiales”@reboot comando # se ejecuta al arrancar el sistema@daily comando # equivalente a "0 0 * * *"@weekly comando # equivalente a "0 0 * * 0"@monthly comando # equivalente a "0 0 1 * *"A diferencia de cron (recurrente), at programa una ejecución única.
echo "comando" | at 15:30 # hoy a las 15:30at 15:30 -f script.sh # desde un ficheroecho "comando" | at now + 10 minutes # dentro de 10 minutosecho "comando" | at 9am tomorrow # mañana a las 9
atq # ver tareas pendientesatrm numero # cancelar una tarea pendiente (el número lo da atq){% hint style=“info” %} at puede no venir instalado por defecto: sudo apt install at y asegurarse de que el servicio atd está activo (systemctl status atd). {% endhint %}
systemd timers
Section titled “systemd timers”es la alternativa moderna a cron, un timer se compone de dos unit files: uno .timer (cuándo) y uno .service (qué).
[Unit]Description=Timer para backup diario
[Timer]OnCalendar=*-*-* 03:00:00Persistent=true
[Install]WantedBy=timers.target[Unit]Description=Backup diario
[Service]Type=oneshotExecStart=/home/pyrhos/scripts/backup.shsudo systemctl daemon-reloadsudo systemctl enable --now backup.timer
systemctl list-timers # ver todos los timers activos y su próxima ejecución| cron | systemd timer | |
|---|---|---|
| Sintaxis | Compacta, una línea | Más verbosa, dos ficheros |
| Logging | Depende de cómo lo configures tú | Integrado en journalctl automáticamente |
| Dependencias | No gestiona dependencias entre tareas | Puede depender de otros servicios/targets |
| Ejecución perdida (sistema apagado) | No se recupera | Persistent=true la ejecuta en cuanto el sistema arranca |