Programación de tareas. Tareas periódicas

En ocasiones es necesario programar algunas tareas para que se ejecuten en determinado momento. Por ejemplo, las copias de seguridad se suelen realizar durante la noche, cuando el sistema tiene una menor carga de trabajo.

En Unix se distingue entre tareas que se van a ejecutar una sóla vez, y tareas que se ejecutan con determinada periodicidad.  El demonio atd se encarga de las primeras y cron de las segundas.

Programación de tareas

El demonio atd permite encolar tareas para ejecutar:

  • En una fecha/hora especificada
  • Cuando la carga de trabajo sea menor que el nivel indicado

Si se pide a  que ejecute algo en determinada fecha/hora, y en el momento previsto el sistema informático está apagado, la próxima vez que se ponga en marcha lanzará las tareas pendientes.

Los comandos que se utilizan para trabajar con el demonio atd son:

ComandoDescripción
atPermite especificar qué comando se debe ejecutar en determiando momento
atqLista los trabajos pendientes del usuario, o de todos los usuarios si lo ejecuta el administrador
atrmBorra trabajos pendientes
batchEjecuta los trabajos cuando la carga del sistema es inferior al nivel indicado
Se puede especificar el momento en el que se debe ejecutar la tarea de muchas maneras diferentes. Es posible indicar un instante temporal de forma absoluta (tal día a tal hora) o bien de forma relativa (dentro de tres dias, a las 16H). Se puede consultar el fichero timespec (en Mandriva 2006 se encuentra en /usr/share/doc/at-3.1.8/timespec) para encontrar la especificación formal del formato de tiempo.

Los ficheros /etc/at.allow y /etc/at.deny controlan qué usuarios pueden encolar tareas. El administrador siempre dispone de esta facilidad.

  1. Si /etc/at.allow existe sólo los usuarios listados en dicho fichero pueden utilizar el comando at
  2. Si /etc/at.allow no existe, se comprueba /etc/at.deny de manera que todos los usuarios que no estén listados en su interior podrán utilizar at
  3. Si ninguno de los dos existe sólo el administrador puede utilizar at

Ejemplos:

  1. Programamos una tarea que creará un fichero llamado Fichero_creado_por_at dentro de un minuto
    [vcarceler@localhost ~]$ mkdir prueba_at
    [vcarceler@localhost ~]$ cd prueba_at/
    [vcarceler@localhost prueba_at]$ ls
    [vcarceler@localhost prueba_at]$ at -m +1min
    warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh
    at> touch Fichero_creado_por_at
    at> <EOT> <- PULSAMOS CTRL+D PARA INDICAR FINAL DE ENTRADA
    job 5 at 2006-04-07 11:23
    [vcarceler@localhost prueba_at]$ ls
    [vcarceler@localhost prueba_at]$ date
    vie abr 7 11:24:11 CEST 2006
    [vcarceler@localhost prueba_at]$ ls
    Fichero_creado_por_at
    [vcarceler@localhost prueba_at]$
  2. Consultamos la lista de tareas encoladas
    [vcarceler@localhost ~]$ atq
    5 2006-04-07 11:23 a vcarceler
  3. Programamos una tarea indicando el comando a ejecutar mediante el parámetro -f
    [vcarceler@localhost ~]$ at -f /usr/bin/programa -m +1min


Tareas periódicas

En la vida real hay muchas tareas que deben realizarse periodicamente. En un sistema informático, la rotación de los ficheros de registro, los backups o ciertas comprobaciones automáticas de seguridad son ejemplos de tareas periódicas. En Unix se utiliza el servicio cron para controlar las tareas periódicas.

Las principales diferencias con at son:

  • Si se utiliza cron, las tareas se ejecutan de manera repetida con cierta periodicidad (cada dos horas, todos los domingos, todos los dias, el primer lunes de cada més ...)
  • Si el sistema está apagado cuando se debe ejecutar una tarea evidentemente no se ejecuta, pero tampoco se ejecutará cuando se encienda.


En el funcionamiento del servicio cron intervienen los siguientes elementos:

ElementoDescripción
/etc/cron.allowFichero de configuración que lista los usuarios que pueden utilizar cron
/etc/cron.denyFichero de configuración que lista los usuarios que no pueden utilizar cron
cronEl demonio que implementa el servicio. En GNU/Linux la versión más popular es el Vixie Cron
crontab (1)
Herramienta que permite editar, listar y borrar las tablas de tareas programadas por el usuario
crontab (5)
Tabla que contiene las tareas programadas. Cada usuario tiene una diferente.
/etc/cron.hourly
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly

Directorios que facilitan la programación de tareas con una periodicidad horaria, diaria, semanay y/o mensual.

Basta con crear un script con la tarea a realizar y colocarlo en el directorio adecuado a la frecuencia con
la que se desea que se ejecute.
Ejemplo de crontab:

# Es posible declarar variables de entorno
MAILTO=usuario
SHELL=/bin/sh
# Ejecutar cinco minutos después de medianoche, cada día
5 0 * * * $HOME/bin/trabajodiario >>$HOME/tmp/out
# Ejecutar a las 14:15 el primer día de cada mes, la salida se envia por correo a usuario
15 14 1 * * $HOME/bin/trabajomensual
# Ejecutar a las 16H de lunes a viernes
0 16 * * 1-5 echo "Qué clase toca ?" | mail -s recordatorio estudiante


Más información: