Programar tareas con anacron

Linux cuenta con la utilidad cron para programar tareas. cron puede usarse incluso por usuarios normales (no administradores) mediante el comando crontab. Sin embargo, las tareas programadas con cron requieren que la PC esté encendida las 24 horas, es decir, si una tarea está programada para ejecutarse a las 12:00 a.m. pero la PC no está encendida en ese momento, entonces la tarea no se ejecutará. Para este tipo de casos existe anacron, un comando de Linux que permite programar tareas que se ejecutarán cuando sea posible mientras la PC esté encendida y no necesariamente a una hora específica. Es decir, anacron no funciona para tareas que deben ejecutarse a una hora exacta (para eso debe usarse cron), sino para tareas que deben ejecutarse diariamente, semanalmente o mensualmente independientemente del tiempo que pase encendida la PC (anacron ejecutará las tareas tan pronto como sea posible cuando detecte que éstas deben ejecutarse).

Por razones obvias, anacron es ideal para PCs de escritorio que no están encendidas las 24 horas. Sin embargo, a diferencia de cron, la configuración predeterminada de anacron no puede ser modificada por usuarios normales. Si puedes modificar la configuración como root, entonces no hay mayor problema y puedes usar el archivo predeterminado de anacron localizado en /etc/anacrontab (aunque debes notar que las tareas programadas se ejecutarán también como root). Para usuarios normales también es posible configurar anacron siguiendo algunos pasos descritos a continuación.

Primero debemos crear un archivo local anacrontab que es el archivo de configuración de anacron, para ello es buena idea crear una carpeta local para los archivos de anacron:

monstruosoft@monstruosoft-PC:~$  cd ~
monstruosoft@monstruosoft-PC:~$  mkdir .anacron
monstruosoft@monstruosoft-PC:~$  mkdir .anacron/etc
monstruosoft@monstruosoft-PC:~$  mkdir .anacron/spool

A continuación podemos crear el archivo anacrontab en la ruta .anacron/etc/anacrontab y llenar la configuración correspondiente para ejecutar el script cuya ejecución deseamos programar:

# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
HOME=/home/monstruosoft
LOGNAME=monstruosoft
# period 	delay	job-identifier	command
1 		15	mi-script		/home/monstruosoft/scripts/mi-script.sh

La parte importante en este ejemplo de anacrontab es la última línea que contiene la instrucción para programar la ejecución del script mi-script.sh todos los días (el valor 1 en el campo period). Cada tarea programada en el archivo anacrontab consiste de una nueva línea de texto con el mismo formato conformado por:

  • Periodo (cada cuantos días se ejecutará la tarea).

  • Tiempo de retraso (cuanto tiempo debe esperar anacron antes de ejecutar la tarea, esto sirve para evitar que anacron ejecute todas las tareas simultáneamente y pueda saturar el sistema, de manera que se puede, por ejemplo, usar un retraso de 5 minutos para la primer tarea, 10 para la segunda, etc.).

  • Identificador (el nombre con el que anacron identificará la tarea, este nombre es usado por anacron para llevar un registro de las tareas que ya ha ejecutado de forma que no las vuelva a ejecutar sino hasta que haya transcurrido nuevamente el periodo definido).

  • Comando (el comando que se ejecutará).

Como pueden ver, la configuración es relativamente simple y, en el ejemplo anterior, hemos definido una tarea para programar la ejecución del script mi-script.sh todos los días. Sin embargo, aún hay algo más que debemos hacer. Debido a que estamos usando una configuración local para anacron, debemos asegurarnos de que las tareas programadas se lleven a cabo ejecutando anacron localmente (como usuario normal, no root) con la configuración que hemos definido. Para esto, usaremos cron.

¿Recuerdan que mencioné que cron sólo ejecutaba tareas exactamente a la hora definida? Podemos usar esto para crear una tarea de cron que ejecute cada hora la configuración local de anacron. ¿Por qué cada hora? Para garantizar que nuestra configuración local de anacron se ejecute independientemente de cuanto tiempo pase encendida o apagada la PC (se ejecutará siempre que el reloj marque una hora en punto). Para crear la tarea de cron, debemos ejecutar el siguiente comando:

monstruosoft@monstruosoft-PC:~$ crontab -e

Y agregar al final del archivo desplegado la siguiente línea:

@hourly /usr/sbin/anacron -t /home/monstruosoft/.anacron/etc/anacrontab -S /home/monstruosoft/.anacron/spool

Al guardar el archivo con este cambio, todo está listo para que nuestra tarea programada se ejecute todos los días independientemente de a que hora encendamos o apaguemos la PC.

La configuración anterior puede parecer complicada pero hay que tener en cuenta que sólo debe realizarse la primera vez. A partir de ahora, para agregar nuevas tareas programadas, basta con editar el archivo anacrontab para que las nuevas tareas se ejecuten automáticamente. También hay que mencionar que no debes preocuparte de que anacron se ejecute cada hora ya que las tareas programadas únicamente se ejecutarán cuando sea necesario. Aún así, puedes configurar anacron para ejecutarse en periodos más largos en lugar de cada hora, o bien sólo una vez al día o cuando la PC arranque (para esto revisa la documentación de cron).

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s