Too Cool for Internet Explorer

Primeras huellas en Linux

02 agosto 2005

Tareas programadas

Hola a todos. Bueno, hoy pensando con qué podía dar un poco el coñazo me han venido a la cabeza las tareas programadas. La razón: pues que hoy me ha tocado pelearme con ellas :$ Las tareas programadas en Linux se llevan a cabo con crontab. Podemos distinguir entre crontab, que sería el programa en sí, y cron, que es el demonio encargado de ejecutar las tareas programadas. en principio, crontab viene instalado por defecto en las distros que he probado (Suse, Debian, RedHat,...) por lo que me saltaré la parte de la instalación. Antes de continuar, comentar que usaré para desarrollar el ejercicio una shell, insistiendo en el mayor potencial que aporta sobre una GUI (Graphic User Interface). De todos modos, también tenéis la posibilidad de usar aplicaciones gráficas, por ejemplo, kron. Sobre el comando crontab, su sintaxis es la siguiente: SYNOPSIS crontab [ -u user ] file crontab [ -u user ] { -l | -r | -e }

  • -l : muestra por pantalla las tareas programadas del usuario indicado con la opción -u, o si se omite dicho parámetro, del usuario logueado en el sistema.
  • -r: elimina las tareas del usuario indicado o del que está logueado.
  • -e: edita el fichero en el que se indican las tareas a ejecutar
Como podemos observar, cada usuario tiene su propio fichero crontab, guardándose éstos en /var/spool/cron/crontabs. Sin embargo, no se pueden editar directamente, por lo que, cuando queramos programar tareas, tendremos que recurrir a crontab -e En el crontab, cada línea que introduzcamos será una tarea programada. Veamos el formato del fichero: *minuto* *hora* *dia* *mes* *año* *comando* Aquí podemos indicar los minutos, horas,.... en las que queramos que se ejecute el comando especificado. Si uno de estos parámetros puede tomar cualquier valor, se usará un asterisco (*). Asímismo, también podemos usar listas, rangos y pasos de tiempo. Veamos un ejemplo: queremos empaquetar y comprimir nuestro directorio de usuario cada minuto. Pues deberíamos hacer lo siguiente: amiantum@debian:~$ crontab -e (editando la tarea) amiantum@debian:~$ crontab -l 0-59/1 * * * * tar -cfvz /almacen/home.tar.gz /home/amiantum
  • 0-59. es un rango. Indica que la tarea se ejecutará desde los 0 hasta los 59 segundos
  • 0-59/1: indica que en el rango anterior, la tarea se ejecutará cada minuto. Si fuera 0-59/5 sería cada 5 minutos.
  • *: queremos que la tarea se ejecute durante todo el día, todos los días de la semana y todas las semanas del mes, todos los meses.
  • tar -cfvz /almacen/home.tar.gz /home/amiantum: es el comando que queremos ejecutar. No me meteré con su sintaxis (man tar ;) )
Si por ejemplo, quisiéramos hacer ese mismo backup los lunes, miércoles y viernes de cada semana a las 2 AM, escribiríamos: 0 2 * 1,3,5 * tar -cfvz /almacen/home.tar.gz /home/amiantum
  • 0: se refiere a los cero minutos
  • 2: se refiere a las 2 AM. Si fuese a las 2 de la tarde deberíamos poner 14 (formato 24 horas)
  • 1,3,5: el primer día de la semana es el 1 (lunes) y el último el 7 (domingo). En las listas, los valores van separados por comas (,)
Si, por ejemplo, queremos ejecutar una serie de instrucciones, en vez de hacer una tarea programada por cada una de ellas, podríamos crear un script con ellas y hacer: 0 2 * 1,3,5 * /home/amiantum/backup donde /home/amiantum/backup es el script que deseamos ejecutar (recordad darles permisos de ejecución) ¿Y cómo saber si la tarea se ha ejecutado correctamente? Pues el demonio cron lo notificará por correo (local) al usuario pertinente. amiantum@debian:~$ mail Mail version 8.1.2 01/15/2001. Type ? for help. "/var/mail/amiantum": 1 messages 1 new >N 1 root@debian Tue Aug 02 18:21 22/872 Cron tar & Aquí podemos ver cómo mi usuario ha recibido la notificación en la que se le indica que el backup se ha realizado correctamente. Espero que os haya aclarado algo la idea ya que cuando se le acaba pillando el tranquillo es realmente útil. Salu2

3 Comments:

  • Curioso curioso,yo no sabia de esto...si eres el qeu direge un server te tiene qeu venir de perlas...y encima es sencillisiomo.Muy bueno ;D

    By Blogger Atreliz, at 8/8/05 13:32  

  • Muy muy interesante..... y además todo sencillo.... Muchas gracias por tus "revelaciones"

    By Blogger ==Dominus==>, at 10/8/05 16:29  

  • Muy bien detallado y explicado, solo comentarte un par de cosas. Por un lado que el quinto parametro no es el año, sino el dia de la semana, lunes=1, martes=2... dentro de lo que seria el crontab:
    0 12 * 2 3 . tarea_a_ejecutar
    donde serian todos los miercoles del mes de febrero a las 12 en punto, hay q tener cuidado con el 3er y 5º parametro ya q el 3º indica dia dl mes, 12, 14, etc, y el 5º dia de la semana, lunes, martes...

    Por otro lado lo de los segundos, no lo he leido en ningun otro lugar, xo no puedo asegurar q sea incorrecto, al contrario q el punto anterior.

    Saludos!

    By Blogger Claw82, at 8/10/09 18:12  

Publicar un comentario

<< Home


Page Rank Checker