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.
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:
Si existe /etc/at.allow
y el usuario que ejecuta
el comando at o
batch está en el fichero se permite
ejecución.
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.
Si no existen ninguno de los dos fichero, solo root puede utilizar el comando.
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:
Si existe /etc/cron.allow
y el usuario que ejecuta
el comando cron está en el fichero se permite
la programación.
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.
Si no existen ninguno de los dos fichero, solo root puede utilizar el comando.
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.