¿En qué podemos ayudarte?
Tareas Periódicas
Automatizar tareas de administración del sistema mediante la programación de scripts de trabajo
Sobre CRON
Cron es un administrador o planificador de tareas de segundo plano. Es un demonio que ejecuta procesos, programas o scripts, a intervalos regulares programados. Por ejemplo podemos instruirlo para ejecutar un script cada cinco minutos, una copia de seguridad diaria, o una exportación semanal de la base de datos. Las horas a las que deben ejecutarse dichos procesos se indican en el fichero crontab correspondiente al usuario. En el sistema operativo Unix, cron es un administrador regular de procesos en segundo plano (demonio) que ejecuta procesos o scripts a intervalos regulares (por ejemplo, cada minuto, de semana o mes). Los procesos que deben ejecutarse y la hora en la que deben hacerlo se especifican en el archivo crontab correspondiente.
En este modulo veremos como:
- Añadir tareas al crontab de root.
- Añadir tareas enlazadas cada hora, diarias, semanales y mensuales.
- Añadir tareas al crontab del sistema.
El crontab de root
El fichero crontab de root se guarda en /var/spool/cron/crontabs/root, pero nunca editaremos los ficheros de cron directamente. Para editar el crontab (fichero donde se guardan las tareas programadas) de root, utilizaremos siempre la utilidad crontab. Emplearemos la orden crontab -e
crontab -e
Utilizaremos siempre esta orden en lugar de ir a buscar el fichero con un editor de texto ya que así nos garantizamos que estamos editando un fichero auxiliar en exclusiva, y evitaremos problemas de concurrencia con otros administradores. Probablemente crontab nos presentara un fichero vacío o bien con la siguiente línea de cabeceras:
# m h dom mon dow command
Esta linea simplemente nos servirá de guión para escribir debajo de ella nuestras tareas. Como se puede ver nos esta indicando el formato, primero los minutos, luego la hora, el día del mes, el mes y el día de la semana, es decir:
# minutos horas diaDelMes mes1-12 diaDeLaSemana1-7 comandoAEjecutar
No obstante añadiremos unas lineas al principio, dándole algunas variables de entorno de nuestro interés, por ejemplo:
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin/:/bin/:/usr/sbin:/usr/bin
MAILITO=sistemas@factor.com
Las variables:
SHELL | Indicaremos con que interprete deberemos ejecutar los comandos |
PATH | Estableceremos el camino de búsqueda de comandos que deberá seguir el sistema. |
MAILTO | Definiremos a que correo irán los avisos en caso de algo vaya mal al ejecutar una de las tareas. Estas variables no son estrictamente necesarias, solo son para ajustarlas si queremos. |
Listando el crontab
Para obtener un listado de las tareas programadas de root, ejecute lo siguiente:
crontab -l
Evidentemente no saldrán tareas si todavía no hemos programado ninguna.
Programando tareas
Ejemplo 1:
Para programar una tarea utilizaremos la orden crontab -e. Por ejemplo para programar una tarea que a las 19h genere un mensaje en un log, escribiremos lo siguiente:
crontab -e
m h dom mon dow command 0 19 echo "Son las 19h." >> /var/log/mi-cron.log
Ejemplo 2:
Si quisiéramos que se ejecutase a las 19:30h pero solo los lunes pondríamos:
# m h dom mon dow command 30 19 1 echo "Son las 19:30h. del lunes." >> /var/log/mi-cron.log
Ejemplo 3:
Y si quisiéramos que se ejecute a las 19:30 del día 1 de diciembre
# m h dom mon dow command 30 19 1 12 echo "Son las 19:30h. del 1 de diciembre." >> /var/log/mi-cron.log
Ejemplo 4:
¿Qué sucede si queremos que se ejecute a las 19 y 19:30? Se puede poner mas de un valor en cada campo, separado por comas:
# m h dom mon dow command 0,30 19 echo "Son las 19 o las 19:30h. No estoy seguro." >> /var/log/mi-cron.log
Ejemplo 5:
¿Y para ejecutarlo cada 5 minutos? Se podría poner “5,10,15,20,25” pero hay una abreviatura, así “/min”
# m h dom mon dow command /5 echo "Han pasado cinco minutos." >> /var/log/mi-cron.log
Directorios predefinidos: hourly, daily, weekly y monthly
Los sistemas UNIX modernos vienen con unos directorios predefinidos para que cron los lee y ejecute lo que hay dentro en los intervalos que su nombre indica:
- /etc/cron.daily
- /etc/cron.hourly
- /etc/cron.weekly
- /etc/cron.monthly
Dichos directorios se suelen utilizar para enlazar guiones que deban ser llamados en el intervalo correspondiente al directorio, sin argumentos. Por ejemplo, si creamos un guion de bash y lo guardamos en /root/bin, le damos permisos de ejecución, y lo enlazamos en /etc/cron.hourly, cron lo ejecutaría cada hora:
chmod +x /root/bin/miScript.sh
ln -s /root/bin/miScript.sh /etc/cron.hourly/...
Video: Ejemplo del uso de Cron
En este video se verá el uso de Cron, la programación de tareas y la estructura de cómo se debe programar una tarea.