Programación de tareas con anacron | Algo de Linux

domingo, 6 de mayo de 2012

Programación de tareas con anacron

cron es una herramienta tremendamente útil en máquinas que están encendidas permanentemente, como por ejemplo servidores. En cambio no nos es tan útil en equipos que no se encuentran encendidos durante todo el tiempo, como por ejemplo portátiles u ordenadores de escritorio. Para éstos tenemos anacron, una herramienta complementaria que nos va a permitir la ejecución de tareas de forma asíncrona.

Por poner un ejemplo, en mi centro tengo una máquina servidora que hace copia de seguridad de los servidores cada día a las 23:00 mediante una tarea programada con cron.

Por otra parte, tengo una tarea en los portátiles que hace copia de seguridad del home de los usuarios cuando se encuentran en el centro y ésta se ejecuta mediante anacron. Si la tuviera programada mediante cron, no se realizaría a menos que el portátil estuviera encendido en el momento programado.

Así como cron puede ser usado por cualquier usuario para programar sus propias tareas, anacron sólo puede ser usado por el administrador.

El principal fichero de configuración de anacron es /etc/anacrontab. Este fichero contiene básicamente lo siguiente:

miusuario@servidor:# cat /etc/anacrontab
# /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

# These replace cron's entries
1    5    cron.daily     nice run-parts --report /etc/cron.daily
7    10    cron.weekly     nice run-parts --report /etc/cron.weekly
@monthly    15    cron.monthly nice run-parts --report /etc/cron.monthly

Las tareas  que queramos ejecutar diariamente, se deben colocar en el directorio /etc/cron.daily.

Las tareas  que queramos ejecutar semanalmente, se deben colocar en el directorio /etc/cron.weekly.

Las tareas  que queramos ejecutar mensualmente, se deben colocar en el directorio /etc/cron.monthly.

Las tareas programadas en el fichero /etc/anacrontab deben tener los siguientes campos:

periodo  retraso  identificador-trabajo  comando

- El campo periodo contiene un valor numérico que indica el número de días que tienen que pasar como mínimo desde la última ejecución de la tarea antes de volver a lanzarla:
  •  1  -> diariamente
  •  7  -> semanalmente
  • 30 -> mensualmente
  • N  -> Cualquier otro valor numérico.
- El campo retraso indica el número de minutos que deben pasar antes de ejecutar el trabajo una vez que la máquina ha arrancado.

- El campo identificador-trabajo es el nombre para el fichero de timestamp de la tarea. Este identificador debe ser único para cada trabajo. Se guardará como un fichero en el directorio /var/spool/anacron y contendrá una sola línea que indica la última vez que el trabajo fue ejecutado.

- El campo comando es el comando o script que queremos ejecutar.

Si echamos un vistazo al directorio /var/spool/anacron veremos que contiene los ficheros indicados en /etc/anacrontab:

miusuario@servidor:~$ ls -l /var/spool/anacron/
total 12
-rw------- 1 root root 9 may  5 08:42 cron.daily
-rw------- 1 root root 9 abr 25 23:21 cron.monthly
-rw------- 1 root root 9 may  2 09:14 cron.weekly

anacron busca en /var/spool/anacron el fichero creado para cada tarea la última vez que se ejecutó. Si observa que ha transcurrido el tiempo entre ejecuciones, lanzará dicha tarea.

Si queremos forzar la ejecución de las tareas sin tener en cuenta la última vez que se ejecutaron podemos usar:

# anacron -f

Y si queremos ejecutar las tareas inmediatamente, sin esperar a que transcurra el tiempo indicado en /etc/anacrontab:

# anacron -n

No hay comentarios: