TuxApuntes
Virtualizacion
cron: Programar/Automatizar tareas en Linux | cron: Programar/Automatizar tareas en Linux |
|
|
|
Imagina que quieres programar una tarea para que se ejecute periodicamente, o en un determinado momento.Por ejemplo, hacer una copia de seguridad de tus archivos el dia 1 de cada mes, o cambiar el fondo de escritorio cada30 minutos. Para programar tareas en Linux, existe un servicio llamado “cron“. ¿Que hace este servicio? Pero antes un poco de culturilla. Cron viene de “cronos” y Cronos segun la mitologia griega era el Dios del tiempo. Existen utilidades graficas para programar tareas, pero antes lo veremos desde la linea de comandos, pues definir la tarea y el intervalo de ejecucion tampoco es muy complicado. Si queremos definir una tarea para cron emplearemos el comando “crontab“. Admite los siguientes parametros: $ crontab -l Para mostrar un listado de las tareas actuales del usuario Ejemplo:
$ crontab -e para editar este fichero de tareas que lee el servicio “cron” $ crontab -r elimina el fichero crontab del usuario $ crontab instala el fichero indicado como fichero crontab del usuario Vale, la opcion que nos interesa principalmente es “-e”, con esta opcion creamos (si no existia ya) o editamos el fichero crontab del usuario actual. Estos ficheros se van dejando en /var/spool/cron/crontabs Todos estos ficheros de crontab siguen la misma sintaxis. En ellos tenemos una linea por cada tarea o accion minutos horas dia-del-mes mes dia-de-la-semana comando El valor que puede tomar cada campo es como sigue: - minutos va de 0 a 59 y representa el minuto en que se ejecuta Existe un caracter comodin que es el asterisco “*”, con el se indica “Todo” es decir todos los minutos, o todos los meses, Tambien se admiten rangos, p.ej: 0-30 indicaria todos los valores de 0 hasta 30, o 15,30,45 indicaria tres valores: 15, 30 y 45 Como comando podemos poner un comando o la ruta a un shell script que queramos ejecutar. ¿Parece complicado?. No, no lo es. Quedara mas claro cuando veamos un ejemplo: Imagina el siguiente caso:
Esta linea ejecutaria el comando tar -cvf /tmp/documentos.tar /home/jose/documentos Todos los dias (*), todos los meses (*), todos los dias de la semana (*) a las 10:30 ¿Empiezas a ver las posibilidades? Podemos programar tareas que se ejecuten cada hora, o cierto dia del mes, o todos los meses, o todos los dias, o solo los Asi que, todas esas tareas periodicas que realizas ocasionalmente (un script para que me limpie de ficheros no necesarios, copias de seguridad, recordatorios, etc) podrian ser programados para ejecutarse de manera automatica. Vamos a hacer un ejemplo sencillo para que veas como funciona el “mecanismo” de este reloj. Con tu usuario ejecuta el siguiente comando: $ crontab -e aparece un pequeño editor que te permite modificar el fichero crontab actual. # m h dom mon dow command y escribe lo siguiente:
Sustituyendo “jose” por el nombre de tu usuario. Lo que acabamos de hacer es “programar” una tarea para el cron. Podriamos ir añadiendo tareas nuevas (siempre 1 en una linea nueva) y se ejecutarian cuando correspondiese. Con Control+O guardas los cambios y con Control+X terminas. Asegurate de que la linea escrita siga el formato que vimos arriba (minuto, hora, mes, etc…) pues en otro caso “cron” ¿Y que estamos haciendo con esta tarea? Pues algo muy tonto, pero para que compruebes in “situ” sus posibilidades. con echo `date` estamos obteniendo la fecha actual y la estamos enviando “>” a un fichero llamado cron.txt que Como estamos ejecutando ese comando, todos los minutos(*), todas las horas(*), todos los dias(*), etc.. Si todo ha ido bien, podras ver como cada minuto se modifica el contenido de ese fichero con el instante de tiempo actual. Si te complicas con la linea de comandos, puedes hacer esto mismo con utilidades graficas como son Kcron (en KDE) , o grontab y gnome-schedule en Gnome. En la siguiente imagen puedes ver el aspecto de Kcron: Te voy a poner ahora otro ejemplo mas interesante. Sacar un backup de tu carpeta home. Para ello emplearemos este comando: tar -jcvf /tmp/CopiaTotal_etc-home_`date +%d%b%y`.tar.bz2 /home /etc Que nos comprime y empaqueta a .tar.bz2 nuestras carpetas /home y /etc dejandonos en el directorio /tmp con el nombre tar -jcvf /tmp/CopiaDiferencial_etc-home_01`date +%b%y`-`date +%d%b%y`.tar.bz2 /home /etc -N 01`date +%b%y` Vale, esto esta muy bien para comandos simples, pero ¿y si quiero hacer algo mas complejo? Pues como te he dicho antes. En la linea de “comando” del cron no solo puedes poner un comando. Podria ser algo como esto:
que es: cada dia 1,2 y 3 de todos los meses. /home/jose/scripts/cambia_wallpaper.sh A este ejemplo le añado 2 redirecciones, que suelen ser utiles cuando estas depurando y quieres guardar trazas > /tmp/out.txt y 2> /tmp/error.txt Es un ejemplo ficticio, pero solo para que puedas ver el juego que da crontab a la hora de definir rangoshorarios. Si necesitas el script “cambia_wallpaper.sh”, puedes mirar el post que escribi ayer. Esto solo ha sido una pequeña introduccion a “cron”, en internet podras encontrar muchos mas tutoriales sobre esta “pequeña”, “precisa” y “potente” herramienta. !!!Cuidado!!!, Cuidado con el demonio del tiempo!!! fuente: http://ubuntulife.net Revisado el: 11-02-2008 14:23
|
| < Anterior | Siguiente > |
|---|
| Enlaces - Blogroll |









