Tareas programadas

Rafa Morales 12 Septiembre 2013
5min
0
Linux

Cron es un demonio que permite ejecutar otros programas o scripts en un momento predefinido y con una periodicidad especificada por el usuario.

Su comportamiento está regulado por su archivo de configuración crontab, cuyo fichero principal se encuentra en la siguiente ruta:

/etc/crontab

Este fichero pertenece al sistema y no se recomienda incluir en él las tareas que deseemos ejecutar, aunque podríamos hacerlo sin problema, ya que si lo editáramos y cometiéramos un fallo de sintaxis no se ejecutaría Cron.

Cada usuario del sistema posee un archivo crontab personalizado (distinto al anterior). Sólo el usuario root puede modificar el archivo crontab de otro usuario. Todos estos ficheros se almacenan en el directorio:

/var/spool/cron/crontabs/

La sintaxis del archivo crontab es muy clara y rígida. Hay seis campos por cada línea, y cada campo está separado por un espacio. Los primeros cinco campos especifican el momento preciso de ejecución, mientras que el sexto campo es el propio comando o script que se ejecutará. Aunque si editamos el fichero crontab del sistema directamente nos saldrá un campo nuevo user en el que se especifica el usuario que debe ejecutar el comando.

m h dom mon dow /commando/a/ejecutar
  • m = minuto/minute (0-59)
  • h = hora/hour (0-23)
  • dom = día del mes/day of month (1-31)
  • mon = mes/month (1-12)
  • dow = día semana/day of week (0-7) (domingo = 0 y 7)

Existen unos caracteres comodines que podemos utilizar en lugar de los números.

  • * = Todos los valores.
  • 0,4,6 = Una serie de valores.
  • 1-5 = Un intervalo de valores.
  • */5 = Cada 5 minutos, horas, días, etc, en función de donde lo necesitemos.

Un ejemplo sería el siguiente:

45 19 * * * rm /home/NombreDeUsuario/tmp/*

Estaremos indicando a cron que el contenido del directorio /home/NombreDeUsuario/tmp/ será borrado todos los días a las 19:45 horas.

Un usuario sólo puede hacer uso de crontab si su nombre aparece en:

/etc/cron.allow

Si este archivo no existe, el usuario puede usar crontab a menos que su nombre aparezca en:

/etc/cron.deny

Para editar el archivo crontab individual de cada usuario sólo es necesario abrir una consola de comandos y ejecutar el siguiente comando. La ventaja de editar así el fichero es que al guardar los cambios se revisa la sintaxis para comprobar que todo está correcto, en caso de algún fallo nos advertiría de ello.

crontab -e

Si es la primera vez que lo ejecutamos, veremos un archivo vacío en el editor de texto con ayuda. Al escribir la tarea y guardarlo sin errores de sintaxis nos aparecerá el siguiente mensaje que indica que se ha realizado correctamente, y se creará el fichero crontab del usuario.

crontab:installing new crontab

El usuario root puede modificar el fichero crontab de cualquier usuario mediante los siguientes parámetros:

crontab –u usuario -e

Podemos modificar el editor de texto, exportando la variable EDITOR:

export EDITOR=”gedit”

No es necesario reiniciar el demonio al incluir nuevas tareas, los cambios son efectivos al momento.

Empleando el parámetro -l veremos las tareas configuradas en crontab para el usuario desde el que lo estamos ejecutando.

crontab -l

Para eliminar todas las tareas de un usuario ejecutamos el comando con el parámetro –r.

crontab -r

Habitualmente, cron envía un e-mail de notificación al usuario propietario de crontab. Esto puede llegar a ser molesto, sobre todo si tenemos un cron que se ejecuta con mucha frecuencia. Para deshabilitar el envío de este e-mail agregaremos lo siguiente al final de cada línea del crontab:

>/dev/null 2>&1

Cron ejecuta comandos (en principio) que no impliquen una salida por entorno gráfico, con lo que si queremos que nos abra una terminal o el gestor de correo Mozilla Thunderbird, por ejemplo, tendremos que añadir DISPLAY=":0" al comando para que la salida use el interfaz gráfico.

0 8 * * * DISPLAY=":0" thunderbird

También podemos redirigir la salida de cualquier comando a una consola en concreto mediante la redirección de salida:

0 8 * * * who >> /dev/tty1

Existen una serie de directorios configurados por defecto para que se ejecuten cada hora, cada día, cada semana o cada mes, y en los que simplemente hay que crear en su interior un fichero de texto en el colocar el comando o script que se desea ejecutar. Estos ficheros deben poseer permiso de ejecución. Estos directorios son:

/etc/cron.hourly/
/etc/cron.daily/
/etc/cron.weekly/
/etc/cron.monthly/

También existe un directorio general en el que incluir ficheros de texto con configuraciones de tareas con la sintaxis de los ficheros crontab ya vista. La inclusión de un fichero en ese directorio es más recomendable que la modificación del fichero /etc/crontab como ya hemos dicho anteriormente. Muchos programas que necesitan ejecutar tareas programadas incluyen su fichero de configuración directamente en ese directorio. Este directorio es:

/etc/cron.d/

En este caso, la sintaxis de la tarea debe de incluir el usuario que ejecuta dicha tarea. Un ejemplo es:

45 19 * * * mi_usuario rm /home/NombreDeUsuario/tmp/*