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:
Comando | Descripción |
---|---|
at | Permite especificar qué comando se debe ejecutar en determiando momento |
atq | Lista los trabajos pendientes del usuario, o de todos los usuarios si lo ejecuta el administrador |
atrm | Borra trabajos pendientes |
batch | Ejecuta los trabajos cuando la carga del sistema es inferior al nivel indicado |
Los ficheros /etc/at.allow y /etc/at.deny controlan qué usuarios pueden encolar tareas. El administrador siempre dispone de esta facilidad.
- Si /etc/at.allow existe sólo los usuarios listados en dicho fichero pueden utilizar el comando at
- 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
- Si ninguno de los dos existe sólo el administrador puede utilizar at
Ejemplos:
- 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]$ - Consultamos la lista de tareas encoladas
[vcarceler@localhost ~]$ atq
5 2006-04-07 11:23 a vcarceler - 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:
Elemento | Descripción |
---|---|
/etc/cron.allow | Fichero de configuración que lista los usuarios que pueden utilizar cron |
/etc/cron.deny | Fichero de configuración que lista los usuarios que no pueden utilizar cron |
cron | El 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. |
# 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