Imprimir
Categoría: ¿Como ... UNIX/Linux?

La utilería cron en los sistemas operativos tipo Unix es una herramienta que nos permite programar tareas o ejecuciones de procesos ya sea por semana, por día por mes o por horas o hasta por minutos.

Para tener una mayor número de herramientas para programar tareas es recomendable conocer los comandos básicos de Unix , el uso del editor VI y la programación en shell de Unix .

Permisos para usar y editar los crontabs

Antes de iniciar con las sintaxis y comandos cron de Unix, es necesario hacer una rápida revisión al sistema de restricciones para los usuarios. Para que un usuario pueda ejecutar la instrucción crontab, lo primero que se tiene que hacer es revisar y en su caso otorgar permisos de modificar su archivo crontab.

La configuración de los permisos a los usuarios se realiza con dos archivos cron.allow y cron.deny y con base en ellos podemos tener diferentes configuraciones:

Para que un usuario pueda utilizar el comando crontab debe aparecer su nombre en el archivo cron.allow. Si el archivo cron.allow no existiera el usuario podrá acceder si su nombre NO existe en el archivo cron.deny.

Si sólo existe el archivo cron.deny pero está en blanco, todos los usuarios podrán hacer uso del crontab.

Si no existiese ninguno de los dos archivos, solo el usuario root podrá hacer uso de los comandos para programar el cron

Para la sintaxis de los archivos cron.allow y cron.deny es únicamente necesario escribir un nombre de usuario por línea.

Sintaxis crontab

La sintaxis crontab es la siguiente:

$ crontab  [-e | -l | -r ] [usuario]

Le parámetro -e indica la edición del cron, -l ver las tareas programadas en el archivo cron y -r remover (borrar) un archivo cron. Si no se especifica el usuario, el comando se ejecutará para el usuario en sesión

Editar los crontabs

Una vez que ya tienes permisos de usuario para ejecutar crontab vamos a comenzar a editar el archivo crontab con la instrucción:

$ crontab -e
0

Con este comando se abrirá el editor de texto predeterminado, si prefieres utilizar vi como editor de texto predeterminado basta con definir la variable de ambiente EDITOR=vi. Para salir del modo edición basta con escribir q[Enter].

En la configuración del crontab le definiremos la frecuencia con que queremos que se ejecute un proceso y la ubicación del shell que vamos a programar con la siguiente sintaxis que especifica el intervalo de repetición de la tarea:

*  *  *  *  * comando o programa a ejecutar
|  |  |  |  |
|  |  |  |  |----- día de la semana (0 - 6) (0-> Domingo)
|  |  |  |------- Mes (1 - 12)
|  |  |--------- Día del mes (1 - 31)
|  |----------- Hora (0 - 23)
|------------- Minuto (0 - 59)

La tarea se ejecutará de acuerdo a estos parámetros, por ejemplo si quisieras ejecutar el programa /export/home/respaldo.sh todos los días viernes a las 3 de la mañana la sintaxis sería la siguiente:

0   3   *   *   4  /export/home/respaldo

Para especificar más de un valor en un registro se puede utilizar la coma (,) para separar los valores; en el ejemplo anterior puedes definir que la tarea se repita los lunes y los viernes a las 3 de la mañana de la siguiente manera:

0   3   *   *   1,4  /export/home/respaldo

Ejemplos de repetición

30   10   *   *   *  Todos los días a las 10:30 hrs.
0   0   1,10,20 * *  Los días 1, 10 y 20 de cada mes a la media noche.
0,30   *   *   *   1  Cada 30 minutos los días lunes, (00:00hrs., 00:30hrs., 01:00hrs. …).
0   22 *   1,2,3,4,5,6,7   *   5  El primer viernes de cada mes a las 10 de la noche.

También puedes programar una tarea para ejecute todos los archivos de una carpeta, por ejemplo:

0   3   *   *   1,4  /export/home/actualizareportes/*


Ambiente del cron

Cuando se invoca una tarea programada con el cron se ejecuta con las siguientes variables de ambiente:

HOME=(directorio home del usuario)
LOGNAME=(nombre de usuario)
PATH=/usr/bin:.
SHELL=/usr/bin/sh

Si requieres ejecutar una tarea programada con variables de ambiente diferentes o agregar algunas otras variables de ambiente a la ejecución, es recomendable programar un script o programa shell que defina las variables de ambiente y luego ejecute la tarea.

Log o bitácora de errores

Para configurar que la ejecución de una tarea genere un archivo con la información de la ejecución del cron puedes dirigir mediante la salida estándar hacía el archivo que lo requieras, por ejemplo:

0   3   *   *   1,4  /export/home/respaldo  >  /export/home/respaldo.log

Así se generará o sobrescribirá el archivo /export/home/respaldo.log cada vez que se ejecute la tarea programada. 

Archivos cron

Los archivos que determinan el funcionamiento de los trabajos programados con cron en Unix son los siguientes:

/etc/cron.d/cron.allow
/etc/cron.d/cron.deny
/etc/cron.d/FIFO
/var/spool/cron/crontabs/*


Si por alguna razón se cerró el proceso cron y lo quieres reiniciar pero te marca el siguiente error:
! cannot start cron; FIFO exists
! ******* CRON ABORTED ********

Tendrías que borrar el archivo /etc/cron.d/FIFO y ejecutar nuevamente:

$ /usr/sbin/cron