Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: https://www.alcancelibre.org
Licencia Creative Commons
© 1999-2026 Joel Barrios Dueñas. Este manual se distribuye bajo la licencia Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional (CC BY-NC-SA 4.0). Usted es libre de compartir y adaptar el material bajo los siguientes términos: debe dar crédito al autor, no puede utilizarlo para fines comerciales y debe compartir las obras derivadas bajo la misma licencia. La licencia completa está disponible en https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.es.
El servicio crond es un componente fundamental para la automatización de tareas en sistemas Linux. Permite programar la ejecución periódica de guiones de instrucciones, mandatos y programas, facilitando el mantenimiento y la administración sistemática del equipo.
El servicio crond es proporcionado por el paquete cronie, el cual es un proyecto derivado de vixie-cron 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
De modo predeterminado, tras ser instalado, el servicio crond viene habilitado 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.
Si utiliza Red Hat™ Enterprise Linux 8/9/10, AlmaLinux, Rocky Linux o Fedora™ y sus derivados, el paquete cronie se incluye en la instalación predeterminada. De ser necesario, ejecute lo siguiente para instalarlo:
dnf -y install cronie cronie-anacron
Para iniciar y habilitar el servicio por primera vez cuando recién se ha instalado, ejecute:
systemctl enable --now crond
El sistema ALDOS utiliza cronie a través de yum. Se incluye en la instalación predeterminada. Para instalarlo o verificarlo, ejecute:
yum -y install cronie cronie-anacron
Para iniciar y habilitar el servicio por primera vez cuando recién se ha instalado, ejecute:
chkconfig crond on service crond start
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.
# Distribuciones modernas (dnf) dnf -y install cronie-anacron # ALDOS (yum) yum -y install cronie-anacron
Cabe señalar que anacron se instala como un programa que en realidad se ejecuta cada hora a través del propio servicio crond.
A continuación se describen los formatos de configuración, ubicación de archivos y ejemplos prácticos para utilizar el servicio crond de manera efectiva.
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) | | | | | también acepta: mon, tue, wed, thu, fri, sat, sun | | | | | .--------· Usuario | | | | | | .-· Programa a ejecutar ↓ ↓ ↓ ↓ ↓ ↓ ↓ 1 14 * * * root /ruta/al/programa.sh
A diferencia de versiones anteriores, con cronie se pueden omitir los primeros 5 campos y en su lugar utilizar las siguientes opciones:
@reboot (ejecutar una vez después de reiniciar el sistema)@yearly o @annually (ejecutar anualmente, equivalente a 0 0 1 1 *)@monthly (ejecutar mensualmente, equivalente a 0 0 1 * *)@weekly (ejecutar semanalmente, equivalente a 0 0 * * 0)@daily (ejecutar diariamente, equivalente a 0 0 * * *)@hourly (ejecutar cada hora, equivalente a 0 * * * *)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) | | | | | también acepta: mon, tue, wed, thu, fri, sat, sun | | | | | .--------· Programa a ejecutar ↓ ↓ ↓ ↓ ↓ ↓ 1 14 * * * /ruta/al/programa.sh
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.
Considerando el siguiente ejemplo:
1 1 * * * root freshclam > /dev/null 2>&1
Lo anterior significa que a las 01:01, todos los días, 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 enviado al dispositivo nulo del sistema (/dev/null), redirigiendo también la salida de error estándar (STDERR) hacia la salida estándar (STDOUT).
Considerando el siguiente ejemplo:
0 23 * * 5 root dnf -y update > /dev/null 2>&1
Lo anterior significa que a las 23:00, todos los viernes, se ejecutará dnf -y update (o yum -y update en ALDOS) como root.
Considerando el siguiente ejemplo:
*/5 * * * * root /usr/bin/systemctl reload httpd > /dev/null 2>&1
Lo anterior significa que cada 5 minutos se ejecutará el recargado del servicio httpd como root .
Considerando el siguiente ejemplo:
* */3 * * * root /usr/bin/systemctl reload httpd > /dev/null 2>&1
Lo anterior significa que cada 3 horas se ejecutará el recargado del servicio httpd 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, 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á un mensaje de correo electrónico a alguien@gmail.com con el asunto "El sistema ha reiniciado".