lunes, 2 de junio de 2014

Tareas programadas en Linux (cron)

   En linux las tareas programadas las controla un 'demonio' llamado CRON.  La configuración es principalmente en modo texto, aunque también podemos utilizar alguna aplicación GUI que modifique los archivos de texto donde se guardan las tareas programadas (kcron, gnome-schedule).

   Existen dos entornos de CRON, el de sistema, y el de usuario.  Para modificar las tareas de sistema, tendremos que editar el archivo '/etc/crontab' y para las tareas de cada usuario, lanzaríamos el comando 'crontab -e' desde el login del usuario, o 'crontab -u usuario -e' desde la consola de root, por ejemplo.
   
   Las tareas generadas con el comando 'crontab -e' se guardan en: '/var/spool/cron/usuario' que será el archivo que se genera automáticamente al guardar la tarea en el documento que lanza el comando, documento que se abrirá con nuestro editor de consola predeterminado.

   Los campos del documento donde editaremos la tarea cambian ligeramente dependiendo de si es un cron de sistema o un cron de usuario, en el cron de sistema tenemos los siguientes campos:

m          h             dom           mon          dow         user       command

 minutes   hours   DayOfMonth   Month   DayOfWeek   User   command/script


   En el cron de sistema se utilizarán todos los campos descritos arriba, pero en el cron de usuario se omitirá el campo "user", ya que se ejecutará directamente como el usuario que crea el trabajo.
   Esto es MUY importante, si en un cron de sistema omitimos el usuario, o en un cron de usuario le incluimos, el trabajo NO funcionará.

   Veamos unos comandos útiles para establecer tareas de CRON:

crontab -e : Edita el archivo de tareas de CRON del usuario actual.
crontab -l : Muestra las tareas del usuario actual.
crontab -u usuario -e : Edita las tareas de un usuario específico.
crontab -u usuario -l : Lista las tareas de un usuario específico.
nano /etc/crontab : Abrimos el archivo de CRON del sistema para definir o borrar tareas.

   Vamos a poner como ejemplo una tarea, que reinicie un servidor cada sábado a las cinco de la mañana, teclearemos:

sudo nano /etc/crontab

Cron de Sistema (por eso lleva el usuario 'root' definido)

   Hay que prestar atención a la sintaxis de cron, ya que comienza con los minutos, en este caso a 'en punto', osea, 00.  Después viene la hora, 05.  Luego los días del mes y/o los meses, en ambos casos tendremos que establecer "todos" con un *, y por último el día de la semana.  Los días de la semana en formato numérico se corresponden con:

0 - Domingo
1 - Lunes
2 - Martes
3 - Miércoles
4 - Jueves
5 - Viernes
6 - Sábado
7 - Domingo

   Y si, 0 y 7 son el Domingo, podemos utilizar cualquiera de los dos.

   Mediante este mismo procedimiento podríamos lanzar un script para backups, descarga de archivos programada, comprobaciones del sistema o actualización del equipo mediante un 'apt-get update; apt-get -y upgrade', etc.

   Dentro de las opciones de Cron, existen por defecto cuatro directorios donde podemos incluir un script o programa para que se ejecute con periodicidad horaria, diaria, semanal o mensual.  Estos directorios son:

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

   La hora exacta a la que se ejecutan los contenidos de estos directorios está controlada por el sistema.

   Para obtener más información sobre el uso de cron podemos poner en la terminal:

man 5 crontab


   ** BONUS **

   Podemos generar una linea de cron específica utilizando esta 'Web GUI', y así sólo tendríamos que copiar el resultado obtenido en nuestro '/etc/crontab' o en el archivo de cron correspondiente al usuario.

No hay comentarios:

Publicar un comentario