Programación de tareas con cron | Algo de Linux

sábado, 5 de mayo de 2012

Programación de tareas con cron

cron es un demonio que nos permite programar tareas con el fin de que se realicen automáticamente.

El principal fichero de configuración de cron es /etc/crontab:

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#


En él se define básicamente cuándo se ejecutarán y en qué directorio hay que colocar scripts para que se ejecuten cada hora (/etc/cron.hourly),  diariamente (/etc/cron.daily/), semanalmente (/etc/cron.weekly) o mensualmente (/etc/cron.monthly).

De este modo, si queremos que un script se ejecute cada día, lo colocaremos en el directorio /etc/cron.daily.

Si queremos recibir un e-mail cuando se produzca un error durante la ejecución de las tareas o cuando nuestro script genere cualquier salida, podemos indicar una dirección de correo en el fichero crontab:

MAILTO=usuario@gmail.com  

Para dejar de recibir emails, podemos quitar la dirección de correo en el fichero crontab:

MAILTO=""
 


Para definir una tarea en un fichero de cron, hay que indicar los siguientes campos:
  • m: minuto en el que se va a ejecutar la tarea (0-59).
  • h: hora (0-23).
  • dom: día del mes (1-31).
  • mon: número de mes (1-12).
  • dow: día de la semana (0-7) 0-> domingo, 1-> lunes ... 7->domingo.
  • user: usuario al que pertenece la tarea.
  • command: comando que vamos a ejecutar.
Un asterisco en uno de los campos representa cualquier valor. Por ejemplo, si tenemos un * en el dow significa que la tarea se ejecutará todos los días de la semana.

Cada usuario puede tener sus propias tareas.

Si un usuario quiere ver las tareas que tiene programadas, tan sólo tiene que ejecutar:

$ crontab -l

Si el usuario quisiera editar su lista de tareas, podría ejecutar:

$ crontab -e

Y si quisiera borrar su lista de tareas:

$ crontab -r

Por defecto, todos los usuarios tienen permiso para usar su propio crontab, aunque sólo root puede editar el crontab de cualquier usuario. Ejemplo:

# crontab -u pepe -e

Se puede permitir usar cron a usuarios concretos, añadiéndolos al fichero /etc/cron.allow
También se puede denegar el uso de cron a determinados usuarios, añadiéndolos al  fichero /etc/cron.deny

Cuando un usuario crea sus propias tareas programadas, éstas se almacenan en el directorio /var/spool/cron/crontabs dentro de un fichero que tiene como nombre su login.

Ejemplos de tareas:

Ejecutar el comando "comando" del usuario "usuario" cada día a las 23:00
0 23    * * *   usuario   comando

Ejecutar el comando del usuario cada 5 minutos:
*/5 *      * * *   usuario   comando

Ejecutar el comando del usuario cada 15 minutos cada domingo:
*/15 *    * * 7   usuario     comando

Ejecutar el comando del usuario los días 15, 20 y 25 de cada mes a las 12:00
0 12     15,20,25 * * usuario   comando

Ejecutar el comando del usuario los días 15,16,17,18,19 y 20 de cada mes a las 12:00
0 12     15-20 * * usuario   comando

Ejecutar el comando del usuario cada 12 horas
0 */12   * * *   usuario   comando

Ejecutar el comando del usuario el primer Sábado de cada mes:
0 0   1-7 * Sat   usuario    comando

Ejecutar el comando del usuario cada hora todos los domingos de enero
0 *   * Jan Sun   usuario   comando