En Linux, las tareas pueden configurarse para que se ejecuten de forma automática en un período de tiempo concreto y en las fechas indicadas. El sistema Red Hat Linux se distribuye preconfigurado para ejecutar determinadas tareas del sistema de modo que el sistema se mantenga actualizado. Por ejemplo, la base de datos slocate se actualiza diariamente. Un administrador del sistema puede utilizar las tareas automáticas para realizar copias de seguridad periódicas, controlar el sistema y ejecutar scripts personalizados, entre otras tareas.
Red Hat Linux contiene cuatro utilidades de tareas automáticas: cron, anacron, at y batch.
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. Para configurar las tareas en función de los períodos, en vez de según horas exactas, consulte la Sección 28.2. Para programar las tareas contemporáneas, remítase a la Sección 28.3.
Para usar el servicio cron, debe de tener el paquete RPM vixie-croninstalado y el servicio crond debe estar en funcionamiento. Para determinar si el paquete está instalado, use el comando rpm -q vixie-cron. Para determinar si el servicio está funcionando, utilice el comando /sbin/service crond status.
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. El valor de la variable SHELL indica al sistema el entorno de shell que deberá utilizarse (en este ejemplo, el shell de bash) y la variable PATH define la ruta usada para ejecutar los comandos. El resultado de las tareas cron se envía por correo electrónico al nombre de usuario definido con la variable MAILTO. Si la variable MAILTO se define como una cadena vacía (MAILTO=""), 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 el nombre corto del día de la semana, por ejemplo, dom, lun, etc.)
command — el comando a ejecutar (el comando puede ser uno tal como ls /proc >> /tmp/proc o el comando para ejecutar un script personalizado que usted haya escrito.)
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.
Una lista de valores separados por comas (,) especifica una lista. 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.
Como podrá observar en el archivo /etc/crontab, usa el script run-parts para ejecutar los scripts en los directorios /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. Remítase al Ejemplo 28-1 para más ejemplos.
# record the memory usage of the system every monday # at 3:30AM in the file /tmp/meminfo 30 3 * * mon cat /proc/meminfo >> /tmp/meminfo # run custom script the first day of every month at 4:10AM 10 4 1 * * /root/scripts/backup.sh |
Ejemplo 28-1. Ejemplos de Crontab
Los usuarios no root pueden configurar las tareas cron tasks con la utilidad crontab. Todos los crontabs definidos por el usuario se almacenan en el directorio /var/spool/cron y se ejecutan utilizando los nombres de los usuarios que los han creado. Para crear un crontab como un usuario, inicie la sesión como ese usuario y escriba el comando crontab -e para modificar el crontab del usuario con el editor especificado por la variable de entorno VISUAL o EDITOR. El fichero usa el mismo formato que /etc/crontab. Cuando se guardan los cambios en crontab, el crontab se almacena según el nombre de usuario, y se escribe en el fichero /var/spool/cron/username.
El demonio cron controla el fichero etc/crontab, el directorio etc/cron.d/ y el directorio /var/spool/cron cada minuto para cada cambio. Si se encuentra algún cambio, estos se descargan en la memoria. De este modo, el demonio no necesita ser reiniciado si se cambia un fichero crontab.
Los ficheros /etc/cron.allow y /etc/cron.deny se usan para restringir el acceso a cron. El formato de los dos ficheros de acceso es un nombre de usuario en cada línea. No está permitido espacio en blanco en ninguno de los ficheros. El demonio cron (crond) no deberá ser reiniciado si los ficheros de control de acceso se modifican. Los ficheros de control de acceso se leen cada vez que el usuario intenta añadir o borrar una tarea cron.
El usuario root puede utilizar siempre cron, sin prestar atención a los nombres de usuarios listados en los ficheros de control de acceso.
Si existe el fichero cron.allow, tan sólo se permitirá a los usuarios presentes en la lista utilizar cron y el fichero cron.deny se ignorará.
Si cron.allow no existe, todos los usuarios listados en cron.deny no se les permite usar cron.
Para iniciar el servicio cron, use el comando /sbin/service crond start. Para parar el servicio, use el comando /sbin/service crond stop. Se le recomienda que inicie el servicio en el tiempo de arranque. Remítase al Capítulo 14 para más detalles sobre cómo iniciar el servicio cron automáticamente al arrancar el sistema.