Saltar al contenido

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 de at para bombazos de una sola vez. - Oirás hablar del estándar de titanio contemporáneo: los systemd-timers.

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.

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:

ventana terminal
# Abrir el cuaderno de órdenes automático de tu usuario actual
crontab -e
# Listar las tareas activas programadas actualmente
crontab -l

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).


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.

ventana terminal
# Instalamos la utilidad que no suele venir por defecto
sudo apt install at
# Programar un reinicio para dentro de 40 minutos
echo "reboot" | at now + 40 minutes
# Ver toda la cola de comandos bomba programados
atq

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.


  1. 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 -e oficial de Root para lograr esto?

  2. 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 comando at en 20 frenéticos y largos minutos?

  3. 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?