www.tuxapuntes.com

Buscar Contacto Colabora... Libro de Visitas
 
.
TuxInicio arrow TuxApuntes arrow Bases de Datos arrow cron: Programar/Automatizar tareas en Linux
cron: Programar/Automatizar tareas en Linux PDF Imprimir E-Mail
Escrito por utopianegra, on 15-01-2008 13:04
Visitas 2965

cron.jpg

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?
Es un proceso que lee un fichero donde le indicamos las tareas y cuando queremos realizarlas y el se encarga de ejecutarlas por nosotros en el preciso momento que le hayamos indicado.

Pero antes un poco de culturilla. Cron viene de “cronos” y Cronos segun la mitologia griega era el Dios del tiempo.
Y eso es lo que vamos a hacer con “cron”, controlar el 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:

root@soledad:~# crontab -l
# m h dom mon dow command
* * * * * echo `date` > /home/jose/Desktop/cron.txt

$ 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
a ejecutar y esta linea es de la forma:

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
- horas va de 0 a 23 y representa la hora en que se ejecuta
- dia-mes va de 1 a 31 y es el dia del mes en que se ejecuta
- mes va de 1 a 12 y representa el mes que se ejecuta
- dia-semana va de 0 a 7 y el el dia de la semana en que se ejecuta (
el domingo se puede indicar con el 0 o con el 7)
- comando es el comando a ejecutar

Existe un caracter comodin que es el asterisco “*”, con el se indica “Todo” es decir todos los minutos, o todos los meses,
o todos los dias.

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:

30 10 * * * tar -cvf /tmp/documentos.tar /home/jose/documentos

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
y me serviria para sacar una copia de seguridad de mi carpeta “documentos”.

¿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
sabados, o miercoles, etc.
Todo depende de la combinacion de valores que pongas en esos campos.

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.
Desplazate hasta la linea por debajo de:

# m h dom mon dow command

y escribe lo siguiente:

* * * * * echo `date` > /home/jose/Desktop/cron.txt

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”
no la entendera, te dara un error y no la ejecutara.

¿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
se guardara en nuestro escritorio.

Como estamos ejecutando ese comando, todos los minutos(*), todas las horas(*), todos los dias(*), etc..
El efecto sera que cada minuto, cambiara el valor almacenado en ese fichero y lo puedes ver facilmente
editando el fichero “cron.txt” que se estara guardando en tu escriotorio cada minuto.

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:

kcron.jpg

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
“CopiaTotal_etc-home y la fecha”. Este comando seria para una copia “total”, si ya tuvieramos un backup realizado y solo
quisieramos añadir los ficheros nuevos o modificados, ejecutariamos un backup diferencial:

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.
Tambien puedes, programarte un shell script que hiciera lo que tu quisieras y despues lo llamas.

Podria ser algo como esto:

15,30,45 11-12 1,2,3 * * /home/jose/scripts/cambia_wallpaper.sh > /tmp/out.txt 2>/tmp/error.txt

que es:

cada dia 1,2 y 3 de todos los meses.
Para las horas 11 a 12
y minutos 15, 30 y 45
ejecutame el script:

/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
de lo que esta pasando.

> /tmp/out.txt
me guarda la salida del shell script (p.ej las lineas que imprima con un “echo”) en el fichero /tmp/out.txt

y

2> /tmp/error.txt
me envia los errores que se produzcan al fichero error.txt (si estas programando un cron que no te funciona, no estariade mas generar una salida de error y consultarla para ver que esta pasando).

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

Comparteme:
Meneame
Delicious
Digg
Technorati
YahooMyWeb
MLinuxfera

Revisado el: 11-02-2008 14:23

Publicado el : Manuales (HowTo), Utilidades de Sistema

Comentarios de usuarios (6)
Enviado por jorge, on 16-04-2008 11:24, IP 190.65.215.72, Invitado
1. cron
hola primero que todo gracias por tu aporte me sirvio d emucho. 
ahora una pregunta: 
yo puedo crear un scrip que en el contenga la ejecucion de algun programa mediante el con.
 

Enviado por utopianegra, on 16-04-2008 18:19, IP 88.31.105.203, Invitado
2. script
Por supuesto, puedes crear cualquier script, hacerlo ejecutable, y programarlo mediante cron. Es una de las tareas mas antiguas de unix o linux.
 

Enviado por gabo, on 12-07-2008 06:25, IP 200.25.205.158, Invitado
3. cron fechas de cumpleaños y días festivo
tengo un sitio web, lo que necesito es que cada día a la 1 de la mañana se ejecute un script almacenado en un php que es para enviar mails de saludos. 
El cron lo puedo hacer, no hay problema pero quiero que sea una sola vez en ese día y ver si hubo un fallo que lo repita y si se envío el email ya no haga mas por ese día. 
Algo así va la cosa... alguien puede ayudarme?
 

Enviado por utopianegra, on 12-07-2008 06:57, IP 83.55.114.109, Invitado
4. .... solución...
Podrias intentar usar algun "flag" , en el script .. redirecciónar la respuesta de error, y según sea buena o mala que deje un flag identificativo, despues el propio script programalo con alguna sentencia de si hay error haz esto y sino haz lo otro, asi el cron se ejecutara siempre pero el script hara una cosa u otra en función del flag.
 

Enviado por novatillo en apuros, on 01-11-2008 01:48, IP 193.146.57.156, Invitado
5. duda sobre el cron
Soy nuevo usando ubuntu y todavia no se utilizar muy bien la shell de manera que necesito su ayuda si pudiera ser... 
Tengo instalado en un servidor apache sobre ubuntu un portal moodle. Este portal tiene un cron que debe ejecutarse cada 10 minutos, para ejecutarlo hay que llamar desde el navegador a una función php. Mi pregunta es, qué comando debo de introducir en el fichero de crontab para que me cargue dicha página? Por si me he explicado mal pongo otro ejemplo, ¿qué comando me abriría desde la shell una página del tipo http://www.google.es?
 

Enviado por utopianegra, on 01-11-2008 03:26, IP 88.8.44.245, Invitado
6. el comando php
El comando php te debe de servir si la pagina es php. En nagios se usa para ejecutar algunos scrips.
 

Añade tu comentario



mXcomment 1.0.5 © 2007-2008 - visualclinic.fr
License Creative Commons - Some rights reserved
 
< Anterior   Siguiente >


Si te resulta util esta informacion y quieres contribuir mediante alguna donación para el mantenimiento y mejora de ese site, te dejamos un enlace para que puedas ayudarnos por medio de paypal.

 Muchas gracias.








Enlaces

Cursos
Masters
MBA

Menu Principal

Login






¿Recuperar clave?
¿Quiere registrarse? Regístrese aquí
Hay 30 invitados en línea

Translate

Top WebLinks

Enlaces - Blogroll
feed image

Tux Estadisticas

OS: Linux h
PHP: 5.2.6
MySQL: 5.0.67-community-log
Hora: 23:49
Caching: Disabled
GZIP: Enabled
Usuarios: 4019
Noticias: 1051
Enlaces: 50
Visitantes: 3670444

Galaxia Linux

TUXrank .. SITES



Creative Commons License


Esta obra está bajo una
licencia de Creative Commons.


¿Quieres anunciarte aquí?

Tux del Dia

th_1423.jpg

Tux Encuesta

¿Aconsejas Ubuntu a tús amigos?
 
¿Has actualizado a Intepid Ibex 8.10?
 

[+]
  • Narrow screen resolution
  • Wide screen resolution
  • Auto width resolution
  • Increase font size
  • Decrease font size
  • Default font size
  • default color
  • blue color
  • green color