Anacron: cuando cron no es suficiente para correr tareas agendadas

En posts anteriores (ver por ejemplo Usar cron para ejecutar tareas repetitivas y Yum-cron), resaltamos la importancia del uso de cron. Sin embargo, puede que una tarea agendada no se ejecute en el momento estipulado. De esta manera, el sistema esperará hasta la próxima concidencia de tiempo para correrla. Por ejemplo, si un script debe correr diariamente a las 11:30 am y el equipo está apagado en ese momento, cron recién intentará ejecutarlo nuevamente el próximo día a la misma hora. Si la situación se repite luego, es probable que la tarea nunca corra. Para vencer esa limitación podemos hacer uso de anacron.

Anacron

Anacron puede hacer que se ejecuten tareas agendadas que no corrieron mientras el equipo estaba apagado. Cuando el sistema vuelva a iniciarse, el servicio se encarga de que corran una después de otra. En la Fig. 1 observamos su archivo de configuración /etc/anacrontab:

Anacron: el archivo de configuración
Figura 1 – El archivo de configuración

En la parte superior vemos las siguientes variables generales:

  • SHELL indica cuál es la consola que se utilizará para correr scripts (/bin/sh).
  • PATH representa las rutas donde se buscarán los ejecutables si no se especifican rutas absolutas de los scripts (/sbin:/bin:/usr/sbin:/usr/bin).
  • MAILTO es la dirección de correo electrónico donde se deben enviar los mensajes de error (root en este caso).
  • RANDOM_DELAY es el número máximo de minutos que transcurrirán desde el momento en que el sistema se inicia y las tareas «pendientes» comienzan a ejecutarse.
  • START_HOURS_RANGE representa el intervalo durante el cual se ejecutarán las tareas «pendientes».

Más abajo podemos ver las siguientes tareas agendadas:

  • cron.daily (nice run-parts /etc/cron.daily)
  • cron.weekly (nice run-parts /etc/cron.weekly)
  • cron.monthly (nice run-parts /etc/cron.monthly)

El comando run-parts se encarga de ejecutar los archivos ejecutables que se encuentran dentro de los directorios especificados. Lo hace de a uno a la vez en orden alfabético en intervalos especificados en la columna delay in minutes. Según podemos ver en la Fig. 1, esto significa que los scripts ubicados en /etc/cron.daily se ejecutan luego de 5 minutos entre uno y el siguiente. Finalmente, la columna period in days nos indica cada cuántos días se debe chequear si hay tareas pendientes en alguno de los directorios mencionados. En resumen, cron actualiza la fecha y hora en la que se ejecutó una cierta tarea para que anacron no vuelva a ejecutarla si dicha fecha y hora se encuentra dentro del período dado por period in days.

Espero que este post les haya sido de utilidad. ¡Nos leemos en breve!