Programar tareas Crontab: realizando tareas periódicas

Anuncio
Programar tareas
Crontab: realizando tareas periódicas
El comando crontab permite programar tareas para realizarlas a ciertas horas,
ciertos días de la semana, del mes, del año, etc. Todo ello siguiendo una sintaxis
muy sencilla. Con este comando, cada usuario puede definir sus propias tareas
programadas. Su sintaxis básica es la siguiente:




crontab -l Mostrar las tareas programadas por el usuario.
crontab -e Editar el fichero crontab. Con esto editaremos el fichero de
configuración de crontab de cada usuario para poder modificar las tareas
programadas.
crontab -r Eliminar el fichero crontab corriente.
crontab -u <usuario> Aplicar una de las opciones anteriores para un
usuario determinado. Sólo siendo root puede hacerse.
Editando nuestro fichero crontab
Cuando hacemos un crontab -e procedemos a editar nuestro fichero crontab con el
editor que tengamos definido, se utilizará el editor vi.
El fichero de crontab tiene una sintaxis específica que deberemos seguir.
Introduciremos una línea para cada tarea que queramos programar. Cada línea se
compone de seis campos separados por espacios; estos campos son, en
orden: minuto, hora, dia, mes, año, comando. Si hacemos esto , hacemos un
fichero como el siguiente (las líneas que comienzan por # son comentarios y no
afectan):
# Cada Navidad reproducir una melodía
0 0 25 12 * mpg123
~/musica/feliz_navidad.mp3
# Hacer una copia de seguridad del
directorio documentos cada día a las 00:00
0 0 * * * tar -czf docs-`date -I`.tar.gz
~/documentos/
( el símbolo ~ es equivalente a $HOME, y a /home/usuario/)
Como podemos ver , esta sintaxis es bastante flexible, y nos permite programar
casi cualquier cosa. Además, podemos hacernos nuestros scripts y hacer que
crontab los ejecute para tener tareas programadas más complejas.
También disponemos de un fichero de crontab para el sistema. Es el
fichero/etc/crontab, pero sólo siendo root puede modificarse.
At: Ejecutando tareas a cierta hora una sola vez
Este comando nos permite ejecutar tareas a una cierta hora solamente una vez.
Para ello utilizaremos el comando at <hora>. Por ejemplo:
$ at 5:30pm
o bien
$ at 17:30
Una vez hayamos ejecutado esto nos aparecerá la consola de at para escribir
comandos o tareas que queramos que se ejecuten a esa hora, por ejemplo:
at> gmessage "Hora de irse!!"
Una vez hayamos terminado de introducir los comandos, presionaremos Control +
D para salir de at.
Podemos especificar la hora de siguientes maneras:


now + <intervalo> Donde la sintaxis para el intervalo es: <n>
(minutes|hours|days|weeks|months). Por ejemplo así para programar
tareas para dentro de 3 horas: $ at now + 3 hours
<hora><dia> Para especificar la fecha por completo. El
parámetro <hora> es obligatorio. Podemos ingresar valores de la
forma 18:00,0600pm, El parámetro <dia> es opcional y podemos
especificarlo de las siguientes maneras: 12/23/2005 , 23.12.2005 .
Podemos omitir el año, pero entonces sólo podemos usar la notación
europea (por ejemplo: 23.12). También podemos especificar el mes
abreviado como: dec 23 o bien como 23 dec.
Además de esto, at también acepta las siguientes opciones:


-l Para mostrar la lista de tareas que tenemos programadas.
-d <num_tarea> Para eliminar la tarea que queramos. Cada tarea tiene
asociado un número que podemos ver con la opción anterior.
Estas son las principales características de at. Para ampliar cualquier información
podemos consultar el man: man at.
Imaginemos que necesitemos que una vez a la semana se comprima todo un
directorio completo y nos cree un fichero en formato tar.gz para tener una copia de
seguridad. Ademas vamos a suponer que lo necesitamos todos los días de lunes a
viernes a las 4:30 de la mañana …
Para comenzar vamos a editar crontab desde una Terminal y ejecutando …
sudo crontab -e
Editor crontab
Como veis el archivo parece complejo pero no tiene mucha complicación una vez lo
entendamos. En mi caso necesito hacer una copia de seguridad del directorio
/home/servidor/datos y que me lo comprima en el fichero backupweb.tar.gz
situado en /home/servidor/datos/Backup-Server para hacer esto
simplemente deberíamos ejecutar tar -czf /home/servidor/datos/BackupServer/backupweb.tar.gz /home/servidor/datos/ web pero además de
indicarle esto debemos indicarle que minuto, hora, día del mes … Para ello le
indicaremos delante del comando de compresión tar lo siguiente …
Crontab explicación
30 4 * * 1-5 tar -czf /home/servidor/datos/Backup-Server/backupweb.tar.gz
/home/servidor/datos/web
Como veis le indico que se ejecute:
1. 30 A la media
2. 4 A las 4 de la mañana
3. * Todos los dias del mes
4. * Todos los meses del año
5. 1-5 De lunes a Viernes (lunes=1; viernes=5)
Ahora solo tenemos que reiniciar cron para que los cambios se apliquen.
sudo /etc/init.d/cron restart
Con esto hemos programado una tarea de forma facil y rápida.
Otro ejemplo, seria aplicar cron para borrar un directorio cada 5 minutos.
0-59/5 * * * * rm /var/log/samba/*log.*
Con esta orden indicaremos que se borre el directorio de log de samba cada 5
minutos.
Descargar