Programar tareas asíncronas en Ubuntu 14.04 LTS

Publicado por P. Ruiz en

Según el diccionario de la Real Academia Española de la Lengua, algo es asíncrono cuando “no tiene lugar en completa correspondencia temporal con otro proceso o con la causa que lo produce“. En nuestro caso, trataremos la programación de tareas asíncronas como un complemento de las tareas programadas estándares. Es decir, aquellas que realizar una determinada tarea cuando llegue un momento preciso del futuro (puedes consultar el artículo Programar una tarea repetitiva desde la terminal de Ubuntu 14.04 LTS).

Sin embargo, ¿qué sucede cuando necesitamos ejecutar una tarea, de forma ineludible, pero el ordenador está apagado en el momento de realizarla? Precisamente, de esto es de lo que se encargan las tareas asíncronas y, en particular, el servicio anacron (el nombre proviene del inglés anachronistic cron).

El servicio anacron se ejecuta cada vez que se inicia el sistema y comprueba si ha vencido el plazo de alguna tarea prevista.

Como veremos más adelante, anacron también atiende las tareas asignadas a cron con un periodo diario (daily), semanal (weekly) o mensual (monthly). Sin embargo, no atiende trabajos que cron deba atender cada hora (hourly).

Para llevar a cabo su trabajo, anacron mantiene archivos con marcas de tiempo en la carpeta /var/spool/anacron para saber en qué momento se ejecutan las tareas (lo veremos más abajo).

Cuando se ejecuta anacron, lee la lista de tareas pendientes, que se encuentran definidas en el archivo /etc/anacrontab y comprueba si ha pasado el número adecuado de días desde la última vez que se ejecutó la tarea. Si es necesario, se ejecuta.

Contenido predeterminado del archivo /etc/anacrontab.

A diferencia de cron, anacron es ejecutado por los scripts de inicio del sistema o por alguna tarea programada y, cuando acaba su trabajo, deja de ejecutarse.

Por cada tarea programada en este archivo se incluyen los siguientes valores:

  • Un número de días. También puede especificarse como @monthly para indicar que la tarea sólo se ejecute una vez al mes, independientemente del número de días que tenga.

  • Un retraso en minutos. Indica el número de minutos que debe esperar el sistema para ejecutar la tarea después de ejecutar anacron. Su objetivo es evitar una avalancha de tareas ejecutándose a la vez cuando arrancamos el sistema.

  • El nombre de la tarea. Puede ser cualquier conjunto de caracteres, excepto la barra (/), pero debe ser único, porque será el nombre que utilice anacron para crear el archivo en /var/spool/anacron, donde guarda la fecha de la última vez que la ha ejecutado.

  • La tarea a realizar.

Aquí vemos el contenido del archivo /var/spool/anacron/cron.daily con la marca de tiempo

Para incluir modificaciones en el archivo /etc/anacrontab sólo necesitamos un editor de textos:

sudo nano /etc/anacrontab

Y esto es todo por el momento. Espero que te resulte útil.