Planificación de Tareas

Es muy normal que queramos que nuestros shell script se ejecuten periódicamente o en un determinado momento. Tareas como la realización de backups, borrado de temporales, seguridad se deben planificar mediante estos comandos. Existen unos servicios para temporizar estos trabajos.

at

Mediante el comando at podemos lanzar nuestros procesos a un tiempo determinado sin necesidad de estar conectados en ese momento.

Para realizar una ejecución de un script de backup a las 10 de la mañana haríamos:

[pcm@sal]$ at 10am < backup.sh
warning: commands will be executed using /bin/sh
job 11 at 2007-04-01 10:00
[pcm@sal]$ atq
10      2007-04-01 01:00 a pcm
11      2007-04-01 10:00 a pcm
[pcm@sal]$ 

Con el comando atq vemos la lista de los procesos pendiente de ejecutarse. Es equivalente utilizar at -l.

Si queremos evitar que se ejecute el comando programado podemos borrar la entrada con atrm indicando el número de trabajo.

[pcm@sal]$ atrm 10

[pcm@sal]$ at -l
11      2007-04-01 10:00 a pcm
[pcm@sal]$ 

El proceso atd se encargará de ejecutar nuestra orden en el momento programado.

Existe variante, realmente un script, que permite lanzar nuestra orden solo si la carga del sistema es lo suficientemente baja, configurada en la ejecución de servicio.

Para configurar los usuarios que tienen permisos para utilizar el comando at existen dos ficheros /etc/at.allow y /etc/at.deny. En la ejecución del comando se comprueba:

  1. Si existe /etc/at.allow y el usuario que ejecuta el comando at o batch está en el fichero se permite ejecución.

  2. Si no existe /etc/at.allow y existe /etc/at.deny, se comprueba que el usuario que ejecuta el comando no este en el fichero, para permitirle.

  3. Si no existen ninguno de los dos fichero, solo root puede utilizar el comando.

cron

Este servicio nos permite dejar las tareas programadas. Con el comando at teníamos que estar lanzando el comando por cada ejecución, con cron dejamos ya programado cuando y cada cuanto queremos esa ejecución.

Es uno de los principales recursos de administración ya que como ya hemos comentado las tareas de administración suele ser repetitivas y periódicas, por lo que con este servicio vamos a poder programarlas a nuestro antojo.

El proceso que controla el servicio, es decir, que ejecuta las tareas programadas es cron, y para realizar nuestras programaciones debemos utilizar el comando crontab.

Para listar tareas utilizaremos crontab -l.

[pcm@sal]$ crontab -l
*/10 10-19 * * * /root/adsl/vpn.sh >> /root/adsl/vpn.log 2>&1

[pcm@sal]$ 

Vemos que por cada tarea hay una serie de parámetros que debemos entender:

  • La primera columna indica el minuto en que se ejecuta, pueden indicarse varios separándolos por comas, por ejemplo 15,30,45, o un rango separando dos valores por un guión. Poniendo el * indicamos que todos los minutos. También se puede indicar cada cuanto, poniendo */2, se ejecutaría cada 2 minutos. Los valores serán entre 0 y 59.

  • En la segunda columna indicamos la hora. Igualmente se pueden indicar varias horas separadas por comas, rangos, asterisco y fracciones. Los valores son entre 0 y 23.

  • La tercera columna nos indica el día del mes. Los valores pueden ser entre 1 y 31.

  • La cuarta nos indica el mes. Los valores son entre 1 y 12, y también se admiten nombres de meses.

  • La quita nos indica el día de la semana. Los valores pueden ser entre 0 y 7, siendo el domingo 0 o 7. También admiten los nombres.

  • Por último siempre tendremos el comando a ejecutar.

Para crear una nueva tarea utilizaremos o modificar las que tenemos crontab -e, que abrirá un editor con las tareas actuales para que modifiquemos o creemos una nueva.

[pcm@sal]$ crontab -e
*/10 10-19 * * * /root/adsl/vpn.sh >> /root/adsl/vpn.log 2>&1
~
~
~
~

Al igual que el comando at la seguridad de utilización del servicio se realiza mediante los ficheros /etc/cron.allow y /etc/cron.deny. Tenemos que tener en cuenta de nuevo:

  1. Si existe /etc/cron.allow y el usuario que ejecuta el comando cron está en el fichero se permite la programación.

  2. Si no existe /etc/cron.allow y existe /etc/cron.deny, se comprueba que el usuario que ejecuta el comando no este en el fichero, para permitirle.

  3. Si no existen ninguno de los dos fichero, solo root puede utilizar el comando.

anacron

Este comando esta pensado para la automatización de tareas cuando el sistema no esta disponible las 24 horas del día.

Con el servicio cron si en la programación de una tarea el sistema no esta encendido, la tarea no se realizara. Con anacron podemos indicar cada cuanto se realizan ciertas tareas y se encarga de que se lleve acabo con esa frecuencia.

Nos permite configurar las tareas por días, lo normal es que tengamos tareas diarias, semanales (7) o mensuales (30), pero no nos asegura el horario de ejecución, únicamente cuando se inicia el sistema y vea que han pasado esa serie de días ejecutará la tarea.