- Última edición el 10 jul 2025, a las 23:43 Sugerir una edición.
cron (Unix) para niños
cron | ||
---|---|---|
![]() Ejemplo de uso de la utilidad de línea de comandos cron
|
||
Información general | ||
Tipo de programa | utilidad estándar de Unix | |
Desarrollador | AT&T Bell Laboratories | |
Lanzamiento inicial | mayo de 1975 | |
Información técnica | ||
Programado en | C | |
En el sistema operativo Unix, cron es como un "reloj despertador" para tu computadora. Es un programa especial que se encarga de ejecutar tareas o "guiones" (pequeños programas) de forma automática en momentos específicos. Por ejemplo, puede hacer que algo se ejecute cada minuto, cada día, cada semana o cada mes.
Las tareas que debe ejecutar y cuándo deben hacerlo se guardan en un archivo llamado `crontab`. El nombre cron viene de la palabra griega chronos (χρόνος), que significa "tiempo".
Puedes pensar en cron como el equivalente a las "Tareas Programadas" que existen en Windows.
Contenido
¿Qué es Cron y para qué sirve?
Cron es un programa que funciona en segundo plano, es decir, está siempre activo pero no lo ves directamente. Su trabajo principal es asegurarse de que las tareas programadas se ejecuten justo a tiempo. Esto es muy útil para mantener los sistemas informáticos funcionando correctamente, realizando copias de seguridad o limpiando archivos viejos.
¿Cómo funciona Cron?
Cron es activado por un programa llamado crond. Este programa lee los archivos de configuración donde se especifican los comandos que deben ejecutarse y cuándo. Los archivos que contienen estas instrucciones se llaman crontab.
Los archivos crontab guardan las listas de trabajos y otras instrucciones para el programa cron. Para controlar quién puede crear su propio archivo crontab, existen dos archivos especiales: `cron.allow` y `cron.deny`. El primero lista a los usuarios permitidos, y el segundo a los no permitidos. Estos archivos suelen estar en las carpetas `/etc/cron.d/` o `/etc/`, dependiendo de la versión de Unix.
Archivos Crontab: Las Instrucciones de Cron
Cada línea dentro de un archivo crontab representa una tarea. Esta línea tiene una "expresión CRON" que indica cuándo ejecutar la tarea, seguida del comando que se debe ejecutar. Algunas versiones de cron, como las que se usan en muchas distribuciones de Linux, también permiten especificar el nombre de usuario que ejecutará la tarea. Esto es útil en sistemas donde varios usuarios comparten el mismo equipo.
Es importante saber que para el "día de la semana" (el quinto campo en la configuración), tanto el número 0 como el 7 significan "Domingo". Sin embargo, algunas versiones de Unix solo aceptan el 0. Si tanto el "día del mes" como el "día de la semana" tienen restricciones (no son un asterisco `*`), entonces la tarea se ejecutará si coincide el día del mes o el día de la semana.
Entendiendo el Formato de Crontab
Aquí tienes un ejemplo de cómo se ve un archivo crontab:
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 01 * * * * root nice -n 19 run-parts /etc/cron.hourly 50 0 * * * root nice -n 19 run-parts /etc/cron.daily 22 4 * * 0 root nice -n 19 run-parts /etc/cron.weekly 42 4 1 * * root nice -n 19 run-parts /etc/cron.monthly
Para añadir, quitar o cambiar tareas, debes editar el archivo crontab. Esto se hace usando el comando `crontab -e`. Este comando abrirá un editor y cargará el archivo crontab de tu usuario.
Cada vez que cron ejecuta una tarea, puede enviar un mensaje al usuario especificado en la variable `MAILTO`, si esta opción está activada.
Sintaxis de las Tareas en Crontab
El formato para configurar las tareas en cron es bastante sencillo:
- El símbolo de almohadilla `#` se usa para comentarios. Todo lo que esté después de este carácter en una línea no será ejecutado por cron.
- El momento en que se ejecuta una tarea se especifica con cinco valores, seguidos del comando:
# Minutos: (0-59) # Horas: (0-23) # Días del mes: (1-31) # Mes: (1-12) # Día de la semana: (0-6), donde 1=lunes, 2=martes,... 6=sábado y 0=domingo (a veces también 7=domingo)
########################################################## #minuto (0-59), # #| hora (0-23), # #| | día del mes (1-31), # #| | | mes (1-12), # #| | | | día de la semana (0-6 donde 0=Domingo) # #| | | | | comandos # ########################################################## 15 02 * * *
Para indicar "todos los valores posibles" en una de estas categorías, se usa un asterisco (`*`). Por ejemplo, un `*` en el campo de minutos significa "cada minuto".
La última parte de la línea es la ruta completa del programa o "script" que quieres que se ejecute.
Ejemplos Prácticos de Cron
Aquí tienes algunos ejemplos de cómo se usan las tareas en cron:
- `1 0 * * * echo -n "" > /www/apache/logs/error_log`
Este comando vacía el archivo de errores de Apache un minuto después de la medianoche (00:01) cada día.
- `*/5 * * * * /home/user/test.pl`
Este comando ejecuta el script `/home/user/test.pl` cada 5 minutos.
- `30 10 * * 1 /usr/bin/who >> /var/log/usuarios.txt`
Este comando ejecuta la orden `who` (que muestra quién está conectado) todos los lunes a las 10:30 de la mañana y guarda el resultado en el archivo `usuarios.txt`.
- `0,30 * * * 1 /usr/bin/who >> /var/log/usuarios.txt`
Este comando ejecuta la orden `who` todos los lunes, cada media hora (a los 0 y 30 minutos de cada hora).
- `*/15 * * * * /usr/bin/who >> /var/log/usuarios.txt`
Este comando ejecuta la orden `who` cada 15 minutos.
- `30 21 * * * cd /media/sda7/dexter/distributions/isos;wget http://example.com/archivo_a_descargar.loquesea`
Este comando cambia a una carpeta específica y luego descarga un archivo de internet, todos los días a las 21:30 (9:30 PM).
- `30 21 * * 6 /sbin/shutdown -h now`
Este comando apaga la computadora todos los sábados a las 21:30 (9:30 PM).
Editar Crontab de un Usuario Específico
Para administrar el crontab de un usuario en particular, se usa el comando `crontab` con la opción `-u`: `crontab [ -u usuario ] archivo` `crontab [ -u usuario ] { -l | -r | -e }`
La opción `-u` se usa para indicar de qué usuario quieres administrar el crontab. Solo el usuario "root" (el administrador del sistema) puede usar esta opción. La opción `-e` se usa para editar el archivo.
Horarios Predefinidos en Cron
Además de los números, cron permite usar algunas palabras clave para horarios comunes, lo que hace la configuración más fácil:
Entrada | Descripción | Equivale A |
---|---|---|
@yearly |
Se ejecuta una vez al año | 0 0 1 1 * |
@annually |
(igual que @yearly ) |
0 0 1 1 * |
@monthly |
Se ejecuta una vez al mes | 0 0 1 * * |
@weekly |
Se ejecuta una vez a la semana | 0 0 * * 0 |
@daily |
Se ejecuta una vez al día | 0 0 * * * |
@midnight |
(igual que @daily ) |
0 0 * * * |
@hourly |
Se ejecuta una vez cada hora | 0 * * * * |
También existe `@reboot`, que hace que una tarea se ejecute cada vez que el programa cron se inicia. Esto suele ocurrir cuando el servidor se enciende. Es útil si necesitas que un programa se inicie automáticamente con el sistema bajo un usuario específico.
Manejo de Zonas Horarias
Muchas versiones de cron simplemente usan la hora del sistema. Esto puede ser un problema si hay usuarios en diferentes zonas horarias. Por eso, algunas implementaciones de cron permiten especificar la zona horaria dentro del archivo crontab, usando una línea como `TZ=<zona_horaria>`, para que las tareas se ejecuten a la hora correcta para esa zona.
Un Poco de Historia de Cron
Primeras Versiones de Cron
La primera versión de cron en Unix versión 7, creada por Brian Kernighan, era un servicio que se iniciaba con el sistema operativo. Su funcionamiento era simple: leía un archivo, veía si había tareas que ejecutar en ese momento, esperaba un minuto y repetía el proceso. Era robusto, pero consumía recursos constantemente.
Capacidad para Múltiples Usuarios
La siguiente versión de cron, lanzada con System V, fue diseñada para que todos los usuarios de un sistema Unix pudieran usarlo, no solo el administrador. Esto fue un gran avance, especialmente en computadoras de esa época que no eran tan potentes como las de hoy.
Versiones Modernas de Cron
Con la llegada del proyecto GNU y Linux, aparecieron nuevas versiones de cron. Una de las más importantes es "cron Vixie", creada por Paul Vixie en 1987. La versión 3 de cron Vixie se lanzó en 1993, y la versión 4.1, renombrada como "Cron ISC", salió en 2004. La versión 3, con algunas mejoras, es la que se usa en la mayoría de las distribuciones de GNU/Linux y BSD.
En 2007, RedHat creó un proyecto llamado "cronie" a partir de cron-vixie 4.1, y en 2009 incluyó "anacron 2.3". Otras implementaciones populares incluyen anacron y fcron. Sin embargo, anacron no es un programa cron independiente; necesita que otro programa cron lo llame para poder ejecutarse.
Véase también
En inglés: Cron Facts for Kids