Programar Tareas
Generalidad
Veremos como podemos configurar nuestro sistema operativo para realizar tareas periódicas de una manera muy cómoda. Tenemos dos mecanismos básicos para programar tareas:
-.crontab: nos permite programar tareas que queremos repetir de forma periódica. -.at: nos permite realizar una tarea a una hora determinada pero sólo una vez.
Crontab
El comando crontab (cron) nos permite programar tareas y/o ejecutar comandos periódicamente a ciertas horas, ciertos días de la semana, del mes, del año, etc. Con este comando, cada administradorBD puede definir sus propias tareas programadas.
Sintaxis básica
* 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 root puede hacerlo.
El demonio cron ejecuta las instrucciones contenidas en:
* el archivo /etc/crontab (tables for cron). * los archivos ubicados en el directorio /etc/cron.d * los archivos /var/spool/cron/crontabs/<usuario>
Editando nuestro fichero crontab
gilbertoc@gilbertoc:~$ crontab -e
Contenido de un fichero crontab
Es similar a:
# m h dom mon dow user command 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root cd / && run-parts --report /etc/cron.daily 47 6 * * 7 root cd / && run-parts --report /etc/cron.weekly 52 6 1 * * root cd / && run-parts --report /etc/cron.monthly # 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/) # Hacer una copia de seguridad de la Base de datos cada día a las 07:30 y 21:30 30 7 * * 1-5 /var/respaldos/scripts/mantenimiento_postgresql.sh 30 21 * * 1-5 /var/respaldos/scripts/mantenimiento_postgresql.sh * m: minuto [0-59]. * h: hora [0-23]. * dom: día del mes [1-31]. * mon: mes [1-12]. * dow: día de la semana [0-7] (0 ó 7 es Domingo). * user: usuario. * command: comando.
A la hora de expresar los minutos, horas, días, meses y año, podemos utilizar listas: 3,23,43; rangos de tiempo: 1-5; pasos: 2-6/2 (= 2,4,6); y * (cualquier valor).
/etc/crontab contiene instrucciones para que cron ejecute los scripts de los directorios
* /etc/cron.hourly * /etc/cron.daily * /etc/cron.weekly * /etc/cron.monthly
Agregando una línea para cada tarea que queramos programar. Podemos hacernos nuestros scripts y hacer que crontab los ejecute para tener tareas programadas más complejas.
En caso de necesitar reiniciar el servicio puede realizarlo:
gilbertoc@gilbertoc:~$ service crond restart O gilbertoc@gilbertoc:~$ /etc/init.d/crond restart
At
Este comando nos permite ejecutar tareas a una cierta hora solamente una vez.
* <hora><dia> Para especificar la fecha por completo.
El parámetro <hora> es obligatorio. Podemos ingresar valores de la forma 1800,18:00,0600pm, o bien uno de los 3 valores especiales: noon (mediodia), teatime (16:00) o midnight (00:00). El parámetro <dia> es opcional. Podemos especificarlo de las siguientes maneras: 12/23/2005 (notación americana), 23.12.2005 (notación europea). 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.
Especificaciones
* now + <intervalo> Donde intervalo es: <n> (minutos|horas|días|semanas|mes).
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.
Ejemplo 1:
$ at 5:30pm
o bien
$ at 17:30
Una vez que hayamos ejecutado esto nos aparecerá el prompt de at para que introduzcamos nuestros comandos o tareas que queramos que se ejecuten a esa hora:
at> gmessage "Comienza la salva de datos!!"
Una vez hayamos terminado de introducir los comandos, presionaremos Control + D para salir de at.
Ejemplo 2:
Programar tareas para dentro de 3 horas:
$ at now + 3 hours