Cursos y talleres en español de Internet de las Cosas (IoT)
            
  Acceso a cursos  

Tareas Periódicas

¿En qué podemos ayudarte?

Tareas Periódicas

Estas aquí:
<< Regresar

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.

Deja una respuesta