viernes, 14 de mayo de 2010

Crontab

Columnas del crontab
m minutos 0-59
h horas 0-23
dom dia del mes 1-31
mon mes 1-12 (o nombre del mes en ingles, como jan, feb, etc)
dow dia de la semana 0-6 siendo 6 el dia domingo
command El comando que sera ejecutado


Como ejemplo podemos pensar en:

0 1 24 5 0 /scripts/comando.sh



La linea anterior correra el comando a la 1:00AM, el dia lunes 24 de Mayo. Que es lo mismo si lo escribimos asi:

0 1 24 may mon /scripts/comando.sh



Ahora bien, que pasa si queremos correr un comando cada hora sin importar la fecha? Un asterisco * es interpretado por el cron como ejecutar el comando especificado toda vez que sea posible segun la columna. Asi que para correr un comando automaticamente via cron cada hora, escribimos en el crontab lo siguiente:

0 * * * * /scripts/comando.sh



Lo cual sera ejecutado todos los dias, cada hora en el minuto 0, en otras palabras a la hora en punto.

Esto permite especificar una variacion de los campos. Digamos que necesitamos ejecutar un comando cada dos horas, para esto escribimos en el campo de hora */2, lo cual sera ejecutado a las 2, 4, 6, 8 etc.

Tambien es posible la utilizacion de comas para indicar la ejecucion mas de una vez. Digamos que queremos ejecutar el comando treinta minutos despues de la hora en punto, y luego cuarenta y cinco minutos despues. Especificamos en el campo minuto asi: 30,45.

Si se escribe un gion – entre dos valores, esto incluira todos los valores en ese intervalo de tiempo. Como ejemplo podemos imaginar correr un comando la primera semana del mes. Con este fin en el dia del mes escribimos: 1-7.

Asi que para correr el comando cada 2 horas, treinta minutos despues de la hora en punto y quince minutos antes de la siguiente hora en punto durante los 7 primeros dias del mes, escribimos en el crontab:

30,45 */2 1-7 * * /scripts/comando.sh



Para guardar la salida del comando en un archivo de texto, podemos escribirlo asi en el crontab:

0 * * * * /scripts/comando.sh >> /home/user/crontab.log



Por default, la salida es enviada por correo a la cuenta del administrador del sistema, para evitarnos esto agregamos lo siguiente al comando:

0 * * * * /scripts/comando.sh >> /home/user/crontab.log 2>&1



Igualmente, si no se requiere ninguna salida del comando, esta puede ser redirigida a /www.null:

0 * * * * /scripts/comando.sh >> /www.null 2>&1



Obviamente la idea del cron es tener alguna informacion de lo que ha ejecutado, de lo contrario es bastante inutil. Pero a veces esta de mas tener guardada la misma informacion.

Creo que se me habia olvidado mencionar la forma de usar crontab para hacer que crond ejecute nuestros comandos. Para crear o editar las entradas del cron, utilizamos el comando crontab -e, lo cual abrira un editor de texto en el cual podemos agregar las entradas al cron, una por linea.

El comando crontab -e ejecuta vi por default. Si se quiere utilizar otro editor de texto se puede cambiar la variable de entorno VISUAL.

deathbian:~# export VISUAL='pico -w'



Para ver todas las entradas creadas en el cron tecleamos el siguiente comando:

deathbian:~# crontab -l



Si queremos borrar todas las entradas al crontab de un usuario tecleamos crontab -r, con el usuario que deseamos borrar sus entradas en el cron.
Nota: El superusuario root puede editar los crontabs de otros usuarios tecleando: crontab -e -u usuario

No hay comentarios: