Configuración y uso de Crond.

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: http://www.alcancelibre.org/
Jabber ID: darkshram@jabber.org

Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

© 1999-2016 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector, hace mal uso de éstos.

Introducción.

Acerca del servicio crond.

El servicio crond es proporcionado por el paquete cronie (utilizado en CentOS 6, Fedora™, openSUSE™ y Red Hat™ Enterprise Linux 6), el cual es un proyecto derivado de vixie-cron (utilizado en CentOS 5, Red Hat™ Enterprise Linux 5 y SUSE™ Linux Enterprise 10 y 11) y que incluye mejoras en la configuración y en la seguridad, como la capacidad de utilizar PAM y SELinux.

Crond es un servicio del sistema encargado de ejecutar programas en horarios determinados. Estos programas pueden definirse en el archivo de configuración /etc/crontab. Se puede utilizar además el directorio /etc/cron.d, el cual sirve para almacenar archivos con el mismo formato del archivo /etc/crontab.

El sistema dispone además de varios directorios utilizados por el servicio crond:

Los archivos contenidos en estos directorios sólo puede ser modificados por root y pueden incluir archivos ejecutables con algún programa en BASH o programas particulares.

El servicio utiliza también archivos localizados dentro del directorio /var/spool/cron, que son generados por los usuarios regulares a través de crontab con la opción -e y que permiten a éstos el poder programar la ejecución de programas.

De modo predeterminado, todos los usuarios con intérprete de mandatos pueden utilizar el servicio crond, a través de crontab y programar, en los horarios que sean necesarios, los programas a los que se tengan privilegios. Es posible restringir el uso de este servicio, añadiendo la lista de nombres de los usuarios a los cuales se requiera denegar el uso de éste, dentro del archivo /etc/cron.deny (un nombre de usuario por renglón).

El paquete correspondiente al servicio crond incluye diferentes manuales que describen el uso y configuración. Para obtener una descripción detallada del uso de crontab, ejecute man 1 crontab:

man 1 crontab

Para obtener una descripción detallada del formato utilizado para definir las fechas a utilizar y una descripción detallada de la configuración del archivo /etc/crontab y el formato a seguir para los archivos que se almacenen dentro de los directorios de configuración mencionados, ejecute man 5 crontab:

man 5 crontab

Equipamiento lógico necesario.

De modo predeterminado, tras ser instalado, el servicio crond viene habilitado en los niveles de ejecución 2, 3, 4 y 5 y seguramente estará en ejecución.

Salvo que se haya hecho algún cambio en el archivo /etc/sysconfig/crond, como por ejemplo para añadir algún argumento al inicio del servicio, es innecesario reiniciar el servicio. La ejecución de los programas se realizará procesando el contenido de los archivos y directorios de configuración.

En CentOS, Fedora™ y Red Hat™ Enterprise Linux.

Si utiliza CentOS 6 o Red Hat™ Enterprise Linux 6 o versiones posteriores de éstos, el paquete cronie se incluye en la instalación predeterminada. De ser necesario, ejecute lo siguiente para instalar el paquete cronie:

yum -y install cronie

Si utiliza CentOS 5 o Red Hat™ Enterprise Linux 5, éstos sistemas operativos utilizan el paquete vixie-cron, el cual se incluye en la instalación predeterminada. De ser necesario, ejecute lo siguiente para instalar el paquete vixie-cron:

yum -y install vixie-cron

Para iniciar el servicio por primera vez cuando recién se ha instalado cronie, sólo ejecute:

service crond start

En openSUSE™.

El paquete cronie se incluye en la instalación predeterminada de openSUSE™. Si fuese necesario, instale el paquete cronie ejecutando lo siguiente:

yast -i cronie

Para iniciar el servicio por primera vez cuando recién se ha instalado cronie, sólo ejecute:

rccron start

SUSE™ Linux Enterprise.

El paquete cron (alias vixie-cron) se incluye en la instalación predeterminada de SUSE™ Linux Enterprise. Si fuese necesario, instale el paquete cron ejecutando lo siguiente:

yast -i cron

Para iniciar el servicio por primera vez cuando recién se ha instalado cronie, sólo ejecute:

rccron start

Anacron.

Para los sistemas donde es imposible que el servicio crond se ejecute las 24 horas, los 365 días del año, como ocurre en los equipos portátiles y sistemas de escritorio, conviene instalar además el paquete cronie-anacron, el cual se encarga de ejecutar los programas pendientes que haya sido imposible procesar con el servicio crond, al estar éstos configurados en horarios en los cuales esté apagado o suspendido el sistema.

Cabe señalar que anacron depende de cronie o vixie-cron, según corresponda la versión del sistema operativo.

Instalación en CentOS, Fedora™ y Red Hat™ Enterprise Linux.

Si utiliza CentOS 6, Fedora™ o Red Hat™ Enterprise Linux 6, instale el paquete cronie-anacron, ejecute lo siguiente:

yum -y install cronie-anacron

Anacron se instala como un programa que en realidad se ejecuta cada hora a través de crond.

Si utiliza CentOS 5 o Red Hat™ Enterprise Linux 5, instale el paquete anacron, ejecute lo siguiente:

yum -y install anacron

Si utiliza CentOS 5 o Red Hat™ Enterprise Linux 5, el servicio anacron viene activo en los niveles de ejecución 2, 3, 4 y 5. Para iniciarlo por primera vez, ejecute lo siguiente:

service anacron start

Instalación en openSUSE™.

Para instalar anacron, ejecute lo siguiente:

yast -i cronie-anacron

Anacron se instala como un programa que se ejecuta cada hora a través de cron.

Procedimientos.

Formato para el archivo /etc/crontab.

Cualquier usuario que sea definido para ejecutar un programa en el archivo /etc/crontab, podrá ejecutar todo aquello para lo cual tenga privilegios, siempre y cuando se defina un intérprete de mandatos válido (por ejemplo /bin/bash o /bin/sh) en la variable de entorno SHELL, así como las rutas de binarios ejecutables que sean necesarias, sin importar lo que esté definido en el archivo /etc/passwd o las variables de entorno definidas en el archivo ~/.bashrc del usuario a utilizar.

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

El archivo /etc/crontab permite además definir a cuál usuario enviar un mensaje de correo electrónico con los resultados de las salidas de los programas que las generen y el intérprete de mandatos a utilizar.

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=alguien@gmail.com

El archivo utiliza un formato de 7 campos, donde se define, respectivamente, minuto, hora, día del mes, mes, día de la semana, usuario a utilizar y el programa a ejecutar

.-----------------------· Minuto (0 - 59)
|  .--------------------· Hora (0 - 23)
|  |  .-----------------· Día del mes (1 - 31)
|  |  |  .--------------· Mes (1 - 12)
|  |  |  |  .-----------· Día de la semana (0 - 6) (domingo=0 o 7), y
|  |  |  |  |             también acepta como valores:
|  |  |  |  |             mon, tue, wed, thu, fri, sat y sun
|  |  |  |  |  .--------· Usuario
|  |  |  |  |  |      .-· Programa a ejecutar
↓  ↓  ↓  ↓  ↓  ↓      ↓
1 14  *  *  *  fulano /home/fulano/bin/tarea.sh > /dev/null 2>&1

Formato exclusivo de cronie.

A diferencia de vixie-cron, con cronie se pueden omitir los primeras 5 campos y en su lugar utilizar las siguientes opciones:

Formato para utilizar con crontab -e.

Todos los usuarios del sistema pueden ejecutar crontab con la opción -e, a excepción de aquellos quienes tengan /dev/null (dispositivo nulo) como intérprete de mandatos o bien que se encuentren listados en el archivo /etc/cron.deny.

Para los usuarios que tengan /sbin/nologin como intérprete de mandatos, será necesario se defina /bin/bash o /bin/sh en la variable de entorno SHELL al inicio del archivo cron correspondiente. Con este tipo de usuarios, habría que ejecutar lo siguiente para poder hacer uso de crontab.

su -l usuario -s /bin/bash -c "crontab -e"

El formato para los usuarios —cuando se utiliza crontab con la opción -e— es el mismo que el del archivo /etc/crontab, pero descartando la columna que define al usuario.

.-----------------------· Minuto (0 - 59)
|  .--------------------· Hora (0 - 23)
|  |  .-----------------· Día del mes (1 - 31)
|  |  |  .--------------· Mes (1 - 12)
|  |  |  |  .-----------· Día de la semana (0 - 6) (domingo=0 o 7), y
|  |  |  |  |             también acepta como valores:
|  |  |  |  |             mon, tue, wed, thu, fri, sat y sun
|  |  |  |  |  .--------· Programa a ejecutar
↓  ↓  ↓  ↓  ↓  ↓
1 14  *  *  *  /home/fulano/bin/tarea.sh > /dev/null 2>&1

Todos los archivos de cron generados por los usuarios se almacenan siempre dentro del directorio /var/spool/cron, utilizando el mismo nombre del usuario como nombre de archivo. En otras palabras: todos los programas definidos por el usuario fulano se almacenarán en el archivo /var/spool/cron/fulano.

Ejemplos de configuraciones.

Considerando el siguiente ejemplo:

1  1  *  *  *  root  freshclam > /dev/null 2>&1

Lo anterior significa que a las 01:01, todos los días, todos los meses, todos los años, todos los días de la semana, se ejecutará freshclam como root. Se añade al final «> /dev/null 2>&1» para que cualquier dato generado por la ejecución de este proceso se descarte y sea enviando al dispositivo nulo del sistema (/dev/null) y que también se envíe la salida de STDERR hacia STDOUT.

Considerando el siguiente ejemplo:

0 23  *  *  5  root  yum -y update > /dev/null 2>&1

Lo anterior significa que a las 23:00, todos los viernes, todos los meses, todos años, se ejecutará yum -y update como root. Al igual que en el ejemplo anterior, se añade al final «> /dev/null 2>&1» para que cualquier dato generado por la ejecución de este proceso se descarte y sea enviando al dispositivo nulo del sistema (/dev/null) y que también cambie el direccionamiento de STDERR hacia STDOUT.

Considerando el siguiente ejemplo:

*/5 *  *  *  *  root  /sbin/service httpd reload > /dev/null 2>&1

Lo anterior significa que cada 5 minutos se ejecutará /sbin/service httpd reload como root .

Considerando el siguiente ejemplo:

*  */3  *  *  *  root  /sbin/service httpd reload > /dev/null 2>&1

Lo anterior significa que cada 3 horas se ejecutará /sbin/service httpd reload como root .

Considerando el siguiente ejemplo:

*  *  */3  *  *  root  /sbin/service httpd reload > /dev/null 2>&1

Lo anterior significa que cada 3 días se ejecutará /sbin/service httpd reload como root.

Considerando el siguiente ejemplo:

30  10 20  2  *  fulano  wall "¡Feliz cumpleaños a mi!"

Lo anterior significa que a las 10:30, cada 20 de febrero, todos lo años, se ejecutará wall "¡Feliz cumpleaños a mi!" como el usuario fulano.

Considerando el siguiente ejemplo:

@reboot  fulano  mail -s "El sistema ha reiniciado" alguien@gmail.com

Lo anterior significa que cada vez que se reinicie el sistema, se ejecutará mail -s "El sistema ha reiniciado" como el usuario fulano, mismo que enviará con mensaje de correo electrónico a alguien@gmail.com con el asunto "El sistema ha reiniciado".