cabecera d-xl

Automatización de tareas en Linux


En GNU/Linux las tareas pueden configurarse para ejecutarse de forma automática en un período de tiempo concreto y en las fechas indicadas. Un administrador del sistema puede utilizar las tareas automáticas para realizar copias de seguridad periódicas o controlar el sistema y ejecutar scripts personalizados, entre otras tareas.

Cron es un demonio que sirve para ejecutar tareas programadas según una combinación de la hora, día del mes, mes, día de la semana y semana. Cron asume que el sistema está activo de forma continua. Si el sistema no está activo cuando está programada una tarea, Cron no se ejecuta.

El fichero de configuración principal de cron, /etc/crontab, contiene las líneas siguientes:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

Las primeras cuatro líneas son variables que se usan para configurar el entorno en el que se ejecutan las tareas cron. La variable SHELL indica al sistema el entorno de shell que deberá utilizarse y la variable PATH define la(s) ruta(s) usada para ejecutar los comandos y el orden de búsqueda. El resultado de las tareas cron se envía por correo electrónico al usuario cuyo nombre aparece en la variable MAILTO. Si MAILTO es igual a la cadena vacía no se enviará correo electrónico. La variable HOME puede utilizarse para establecer el directorio principal que deberá usarse al ejecutar los comandos o scripts.

Cada línea del fichero /etc/crontab tiene el formato siguiente:

minute hour day month dayofweek command

  • minute - número entero entre 0 y 59.
  • hour - número entero entre 0 y 23.
  • day - número entero entre 1 y 31 (debe ser un día válido si se especifica un mes).
  • month - número entero entre 1 y 12 (o nombre corto del mes, por ejemplo, ene, feb, etc.).
  • dayofweek - número entero entre 0 y 7, donde 0 o 7 corresponde a Domingo, o bien el nombre corto del día de la semana, por ejemplo, Sun (Sunday, domingo), Mon, etc.).
  • command - comando que debe ejecutarse.

En cualquiera de los valores antes indicados, se puede utilizar un asterisco (*) para especificar todos los valores válidos. Por ejemplo, un asterisco para el valor de mes significa que el comando se ejecutará cada mes dentro de las limitaciones del resto de los valores.

Un guión (-) entre los números enteros indica un intervalo de números enteros. Por ejemplo, 1-4 significa los números enteros 1, 2, 3 y 4.

Para especificar una lista se utilizan valores separados por comas. Por ejemplo, 3, 4, 6, 8 indica esos cuatro números enteros.

La barra (/) puede utilizarse para especificar valores de pasos. El valor de un número entero se puede omitir dentro de un intervalo si se indica a continuación del intervalo lo siguiente /número entero. Por ejemplo, 0-59/2 puede usarse para definir el resto de los minutos del campo minuto. Los valores de pasos también pueden utilizarse con un asterisco. Por ejemplo, el valor */3 puede usarse en el campo de mes para omitir el tercer mes.

Las líneas que empiezan por almohadilla (#) son comentarios y no se procesan.

Tal como puede verse en el fichero /etc/crontab, se utiliza el script run-parts para ejecutar los scripts de /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly y /etc/cron.monthly cada hora, diariamente, semanalmente o mensualmente, respectivamente. Los ficheros de estos directorios deben ser scripts de shell.

Si las tareas cron deben ejecutarse según una programación distinta a la hora, día, semana o mes, esto puede agregarse en el directorio /etc/cron.d. Todos los ficheros de este directorio utilizan la misma sintaxis que /etc/crontab.

Existen utilidades como CroMagnon o Kcrontab que permiten configurar cron de forma gráfica.


Contacto