Cron es una utilidad para programar operaciones en sistemas operativos tipo Unix, incluyendo Linux. Permite a los usuarios crear tareas cron que se ejecutarán automáticamente a una hora determinada. Con frecuencia, la herramienta Cron se utiliza para el mantenimiento del sistema operativo, la creación de copias de seguridad y otras tareas administrativas.
En este artículo te explicaremos cómo usar el demonio Cron en un sistema operativo Linux.
Definición de Cron y Crontab
¿Qué es cron?
Cron es un demonio en sistemas Unix/Linux que ejecuta tareas programadas automáticamente en segundo plano según un horario definido. Se usa para automatizar tareas como copias de seguridad, mantenimiento del sistema o ejecución de scripts.
Crontab
Crontab es el comando usado para gestionar el planificador Cron. Permite crear, editar o eliminar un archivo crontab, que contiene los comandos y su programación (minutos, horas, días, etc.) para que el demonio cron los ejecute. Cada usuario tiene su propio archivo crontab, y los administradores pueden gestionar el crontab del sistema en /etc/crontab
.
Archivos de configuración
Los archivos /etc/cron.allow
y /etc/cron.deny
controlan quién puede usar el planificador Cron. Estos archivos son opcionales y, por defecto, no existen:
/etc/cron.allow
: Si existe, solo los usuarios listados en este archivo pueden usar Cron./etc/cron.deny
: Si existe ycron.allow
no existe, los usuarios listados en este archivo no pueden usar Cron.
Si /etc/cron.allow
existe, tiene prioridad y /etc/cron.deny
se ignora. Cada línea en estos archivos debe contener un solo nombre de usuario, sin espacios. Los permisos se verifican cada vez que un usuario intenta crear o modificar una tarea cron
Abrir la tabla de tareas cron
La tabla cron (o crontab) es un archivo de sistema donde los usuarios pueden crear tareas cron. Cada línea en crontab representa una tarea individual con información sobre la programación y el comando a ejecutar.
Para abrir la tabla cron del usuario actual, usa el siguiente comando:
crontab -e
Nota: Este comando edita la tabla cron del usuario actual. Si necesitas programar tareas a nivel de sistema, usa sudo crontab -e
para el usuario root o edita archivos en /etc/crontab
con permisos de administrador.
Sintaxis de las tareas cron

Las tareas cron tienen su propia sintaxis, que se ve así:
MIN HOUR DOM MON DOW command-to-execute
# minuto(s) hora(s) día(s) mes(es) día de la semana(s) comando(s)
Los campos se separan por espacios o tabulaciones. Los cinco primeros son valores numéricos, y el sexto es el comando que se ejecutará.
Donde:
- MIN: Indica el minuto de la hora en que se ejecutará el comando (rango: 0-59);
- HOUR: Indica la hora del día (rango: 0-23);
- DOM: Significa el día del mes (rango: 1-31);
- MON: Indica el mes del año (rango: 1-12 o JAN-DEC);
- DOW: Significa el día de la semana (rango: 0-6 o SUN-SAT, donde 0 y 7 suelen representar el domingo, dependiendo del sistema);
- command-to-execute: Significa el comando o script que debe ejecutarse a la hora especificada.
En la siguiente tabla se describe brevemente cada uno de los campos:
Campo | Rango de valores | Descripción |
---|---|---|
minuto | 0-59 | Minuto de inicio del comando |
hora | 0-23 | Hora de inicio |
día | 1-31 | Día (del mes) de inicio |
mes | 1-12 | Mes de inicio |
día semana | 0-6 | Día de la semana de inicio (domingo=0, lunes=1, etc.) |
comando | Secuencia de comandos a ejecutar |
Nota: El valor de los cinco primeros campos puede ser
*
(asterisco), lo que significa todos los valores válidos, o una lista de elementos separados por comas. Un elemento es un número o un rango de números indicado por dos valores separados por un guion (por ejemplo, 10-12).
Entonces, también se pueden usar operadores especiales para especificar el tiempo de ejecución de las tareas cron:
*
(asterisco): Significa todos los valores posibles para ese campo;,
(coma): Se usa para enumerar valores de tiempo;-
(guion): Se usa para indicar un rango de valores;/
(barra inclinada): Se usa para especificar intervalos regulares. Por ejemplo,*/10
en el campo de minutos significa “cada 10 minutos”.
Ejemplos de creación de tareas cron
Supongamos que necesitamos crear una copia de seguridad del directorio /home/user/documents
en /backup/documents
todos los días a medianoche. Para ello, usaremos la utilidad rsync
y escribiremos la siguiente tarea en crontab:
0 0 * * * /usr/bin/rsync -a /home/user/documents /backup/documents
También, cada domingo a las 2 AM queremos limpiar el contenido del directorio /tmp
. Para resolver esto, usaremos esta tarea cron:
0 2 * * 0 /usr/bin/find /tmp -type f -atime +7 -delete
Tenemos un script /home/user/scripts/script.py
en nuestro sistema operativo. Necesitamos ejecutarlo cada 15 minutos. Para esto, escribiremos la siguiente línea en la tabla cron:
*/15 * * * * /usr/bin/python3 /home/user/scripts/script.py
Para registrar la salida de esta tarea en un archivo de log, podemos añadir una redirección:
*/15 * * * * /usr/bin/python3 /home/user/scripts/script.py >> /home/user/logs/script.log 2>&1
Esto guarda tanto la salida estándar como debi como los errores en /home/user/logs/script.log
.
La tarea cron que se muestra a continuación permitirá ejecutar el script de mantenimiento del sistema operativo maintenance.sh
a la 1 AM todos los días del 1 al 7 de cada mes:
0 1 1-7 * * /home/user/scripts/maintenance.sh
Finalmente, crearemos una tarea cron que generará un informe usando el script generate_report.sh
a las 2 AM todos los días de enero, marzo, mayo y julio:
0 2 * 1,3,5,7 * /home/user/scripts/generate_report.sh
Si tu script requiere variables de entorno, puedes definirlas en el crontab. Por ejemplo:
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
*/15 * * * * /usr/bin/python3 /home/user/scripts/script.py
Ejemplo extra de uso de cron
Cron es útil para tareas como la rotación de archivos, limpieza de directorios temporales o copias de seguridad. Por ejemplo, para limpiar archivos en /tmp
con más de 1 día de antigüedad, ejecutándose cada 2 horas (a las 0:00, 2:00, 4:00, etc.):
0 */2 * * * /usr/bin/find /tmp -type f -mtime +1 -delete
Verifica su ejecución con:
tail /var/log/syslog | grep CRON
Cadenas especiales de representación de tiempo en crontab
Las cadenas especiales en crontab son accesos directos que permiten programar operaciones sin necesidad de especificar manualmente cada campo de tiempo y fecha. Algunas de ellas son:
@hourly
: Ejecuta la tarea cada hora (0 * * * *);@daily
o@midnight
: Una vez al día a medianoche (0 0 * * *);@weekly
: Una vez a la semana a medianoche el domingo (0 0 * * 0);@monthly
: Una vez al mes a medianoche el día 1 (0 0 1 * *);@yearly
o@annually
: Una vez al año a medianoche el 1 de enero (0 0 1 1 *);@reboot
: Una vez en cada reinicio del sistema operativo.
Nota: La cadena
@reboot
depende del demonio cron y puede no estar soportada en todos los sistemas. Asegúrate de que el usuario que ejecuta la tarea tenga permisos para ejecutarla al iniciar el sistema.
Por ejemplo, necesitamos:
- Guardar una copia de seguridad del directorio
/home/user/documents
en/backup/documents
todos los días a medianoche; - Ejecutar el script de Python
script.py
del directorio/home/user/scripts
cada hora; - Ejecutar el script
/path/to/your/task.sh
cada vez que se reinicie el sistema operativo.
Para esto, escribiremos las siguientes líneas en la tabla cron:
@daily /usr/bin/rsync -a /home/user/documents /backup/documents
@hourly /usr/bin/python3 /home/user/scripts/script.py
@reboot /path/to/your/task.sh
Ver y eliminar tareas cron
Para mostrar el contenido de crontab en la ventana de la terminal, ejecuta en la línea de comandos:
crontab -l
Para verificar si tus tareas cron se ejecutan correctamente, revisa los logs del sistema, normalmente en /var/log/syslog
o /var/log/cron
, dependiendo de la distribución de Linux. Usa un comando como:
grep CRON /var/log/syslog
Y para eliminar todas las tareas cron, usa el comando crontab
con la opción -r
:
crontab -r
Conclusiones
Cron es una herramienta poderosa para automatizar tareas en Linux, desde copias de seguridad hasta scripts de mantenimiento. Con la sintaxis y ejemplos de este artículo, puedes programar tareas para que se ejecuten en el momento exacto que necesitas.
Un consejo: siempre prueba tus comandos manualmente antes de añadirlos al crontab para evitar errores. ¡Automatiza tus tareas y ahorra tiempo en la administración de tu sistema!
Si tienes preguntas, déjalas en los comentarios y te ayudaremos.
¿Qué te parece?
Es bueno conocer tu opinión. Deja un comentario.