6.4 Automatización de Tareas (Cron)
¡Prepárate!
- Entenderás los legendarios “5 Asteriscos” de Cron. - Aprenderás a
orquestar el fichero individual de usuario editando
crontab -e. - Diferenciarás el uso aplazado deatpara bombazos de una sola vez. - Oirás hablar del estándar de titanio contemporáneo: lossystemd-timers.
1. El Demonio Infatigable: cron
Sección titulada “1. El Demonio Infatigable: cron"Imagina que necesitas comprimir todos los archivos importantes de la carpeta /etc/ cada domingo a las 3:00 de la madrugada y mandarlos al disco de Backup, cuando nadie usa el servidor. ¿Vas a programar tu despertador, levantararte de la cama a las 2:55 am, acceder por SSH al servidor y teclear tú mismo el comando tar?.
En UNIX existe un demonio silencioso llamado Cron que lee un fichero maestro cada minuto y, si la hora en el reloj coincide con una regla apuntada en su cuaderno, lanza scripts por ti para siempre.
Modificando tus reglas con crontab
Sección titulada “Modificando tus reglas con crontab"Para crear reglas vinculadas a TI o al usuario ROOT, NO debes editar ningún fichero de texto con Nano directamente por temas de sintaxis y seguridad. Debes usar siempre el comando de edición oficial:
# Abrir el cuaderno de órdenes automático de tu usuario actualcrontab -e
# Listar las tareas activas programadas actualmentecrontab -l2. La Sagrada Sintaxis de los 5 Asteriscos
Sección titulada “2. La Sagrada Sintaxis de los 5 Asteriscos"Dentro de la pantalla de edición, cada TAREA a automatizar requiere ocupar solamente una larga línea de texto. La sintaxis matemática se divide en el control estricto de cinco columnas temporales seguidas del comando que deseas que el PC dispare.
[Minuto] [Hora] [Día del Mes] [Mes] [Día Semana] COMANDO A EJECUTAR
El * significa “CUALQUIERA” / “CADA”.
Ejemplos Reales:
-
Cada hora en punto todo el año:
0 * * * * /bin/echo "Ha pasado una hora"(Corre en el min. 0, de cada hora_, cada día_, cada mes_, cada día de la semana_). -
Todos los días de la vida a las 3:30 AM (Madrugada para backups):
30 3 * * * /usr/bin/tar -czf /backup/seguridad.tar.gz /etc -
Todos los domingos a medianoche:
0 0 * * 0 /usr/local/bin/limpiador_log.sh(El día de la semana es numérico: 0 es Domingo).
3. Disparos Únicos Diferidos (at)
Sección titulada “3. Disparos Únicos Diferidos (at)"cron es fantástico para bucles infinitos y repeticiones. ¿Pero qué pasa si quieres que algo se ejecute sólo UNA vez y después se muera la regla, como por ejemplo un reinicio especial dentro de 40 minutos? Usamos at.
# Instalamos la utilidad que no suele venir por defectosudo apt install at
# Programar un reinicio para dentro de 40 minutosecho "reboot" | at now + 40 minutes
# Ver toda la cola de comandos bomba programadosatq4. El Sucesor de Titanio (systemd timers)
Sección titulada “4. El Sucesor de Titanio (systemd timers)"Aunque cron se pide en todos los exámenes, la realidad moderna lo está abandonando (debido a que Cron era un caos registrando en los logs).
Su legítimo y sofisticado sucesor en Debian Mismo y Linux Corporativo en general se ha transformado en los Timer Units de Systemd (systemctl).
En lugar de escribir ilegibles líneas con asteriscos arcaicos (30 3 * * *), creamos un archivo oficial .timer gestionable individualmente y dotado de sintaxis explícita humana y clara como la luz del día al estilo: OnCalendar=Sun *-*-* 03:00:00. Adicionalmente, todo fallo de su ejecución nocturna se indexa perfectamente en journalctl, resolviendo el gran defecto de la arquitectura primitiva del Cron.
Comprueba tus conocimientos
Sección titulada “Comprueba tus conocimientos"-
Examen práctico real de Cron: Tu superior quiere que los servidores generen y procesen un recibo matemático y que solo y exclusivamente corra todos los días laborales (De Lunes a Viernes) a las 08:15 AM de la mañana. ¿Cuál es la sintaxis ruda y milimétrica que debes meter en el
crontab -eoficial de Root para lograr esto? -
Acabas de cometer un error desastroso en un switch de red de una sucursal en Francia dejándola aislada de tu nube porque le cambiaste la IP. Recuerdas, sudando una lágrima de sudor frío, que esto te pasaría y hace 10 minutos (antes del fallo) creaste la orden aplazada mágica
echo "/sbin/reboot" | at now + 30 minutes. Acabas de cortarte las manos pero todavía puedes esperar. ¿Qué sucederá gracias al comandoaten 20 frenéticos y largos minutos? -
Un empleado Junior de tu equipo se queja histérico diciendo: “Programé perfectamente el script en /home/junior/bash.sh en el root de Cron tirando
crontab -e. Le puse los 5 asteriscos así que sé que se corre cada minuto. El script echa humo a mano borrando /tmp/ basuras, pero por CRON la carpeta /tmp se me llena por las noches!”. Chequeas su sintaxis de ejecución escrita al final del asterisco y descubres un error mortal común Sysadmin. ¿Qué fallo arruinó al Junior?