6 de agosto de 2008

Programar la ejecución de aplicaciones (cron)

Para programar la ejecución de un comando o una aplicación se utiliza el demonio cron/crond que se inicia automáticamente con el sistema. A este proceso se le conoce como cron.

Para agregar, quitar o modificar tareas hay que editar el crontab. Esto se hace con "crontab -e" que abrirá un editor en donde hay que agregar el cron (tareas a programar).

El cron consta de la siguiente sintaxis:

Minutos Horas DiasMes Mes DiaSem Usuario Comando/Archivo_A_ejecutar

Donde:
  • Minutos: entre 0 y 59
  • Horas: entre 0 y 23
  • DiasMes (Días del mes): entre 1 y 31
  • Mes: entre 1 y 12 (se pueden poner las tres primeras letras del nombre del mes en inglés)
  • DiaSem (Días de la semana): entre 0 y 7 (0 y 7 corresponden al domingo, se pueden usar las tres primeras letras del nombre del día en inglés)
  • Usuario: Indica con que usuario se ejecutara tal acción. Se omite si el usuario que agrega el cron es un usuario diferente de root.
Si no se coloca alguno de los primeros cinco indicadores se pone el carácter * en su lugar.
Para separar indicadores de un mismo tipo se utiliza la coma (,)
Para indicar rangos se usa el signo -
Para variar el incremento del rango a n se puede colocar /n después del rango

Ejemplo de un cron:
30 22 * * * /ruta/del/archivo/a/ejecutar

Lo anterior indica que se ejecutara el archivo "/ruta/del/archivo/a/ejecutar" a las 10:30 PM todos los días de todos los meses.

Para eliminar un cron simplemente se comenta o se elimina la linea del cron.


Cron avanzado

Lo descrito anteriormente sirve para que un usuario diferente de root (con sus limitaciones) agregue o modifique un cron.

El archivo /etc/crontab es el archivo de configuración principal del cron en el que se configuran directorios cuyos archivos o scripts que contengan se ejecutaran en el momento especificado. Estos cron se ejecutan independientemente de que no este ningún usuario logueado. En /etc/crontab también se pueden agregar cron específicos, pero es recomendable agregarlos en los archivos ubicados en los directorios configurados en este archivo. Los directorios configurados en /etc/crontab son las siguientes:

/etc/cron.hourly/ Directorio cuyos archivos que contiene se ejecutaran cada hora durante todos los días, el minuto se especifica en "/etc/crontab"

/etc/cron.daily/ Directorio cuyos archivos que contiene se ejecutaran diariamente a la hora y minuto especificado en el archivo "/etc/crontab"

/etc/cron.weekly/ Directorio cuyos archivos que contiene se ejecutaran cada semana el día de la semana, hora y minuto especificado en el archivo "/etc/crontab"

/etc/cron.monthly/ Directorio cuyos archivos que contiene se ejecutaran cada mes el día del mes, hora y minuto especificado en el archivo "/etc/crontab"

Nota: Los archivos que se encuentren dentro de estos directorios pueden contener un comando, pueden contener el código que se va a ejecutar o puede indicar que se ejecute otro archivo. Ejemplo del contenido de un archivo ubicado en alguna anterior:

## No es necesario especificar el tiempo en el cual se ejecutara,
## ya se especifico en /etc/crontab
## Indica que se ejecute el archivo "/root/respaldos.sh"
## Tambien puede ser: /root/./respaldos.sh
/root/respaldos.sh

/etc/cron.d/ Directorio cuyos archivos que contiene se ejecutan según lo especificado en dichos archivos. En este directorios se configuran cron personalizados. Ejemplo del contenido de un archivo en este directorio:

01 06,15 * * * root /etc/init.d/script_a_ejecutar.sh

Lo anterior significa que se ejecutara por root el archivo "script_a_ejecutar.sh" al minuto 1 de las 6 y 15 horas, todos los días del mes, durante todos los meses, todos los días de la semana.

Nota: Todos los archivos deben tener permiso de ejecución para que se ejecute el cron.


Recomendación
  • Si desea ejecutar una aplicación cada hora, diaria, semanal o mensual cree un archivo en el directorio "cron.hourly", "cron.daily", "cron.weekly" o "cron.monthly" según lo deseado.
  • Si desea ejecutar una aplicación que se ejecute en un tiempo especificado cree un archivo en el directorio "cron.d".

No hay comentarios: