Comando cron en Linux: Programa tareas automáticas con Crontab
El comando cron en Linux es un servicio que provee la función de programación de tareas para los usuarios y el sistema.
Permite que un comando, programa o script sea programado para un día, mes, año y hora determinados. Es muy usado en tareas que necesitan ejecutarse cada hora, día o cualquier otro período, de forma recurrente.
Generalmente el cron se utiliza para ejecutar archivado de logs y verificación de la integridad del sistema y otros mantenimientos periódicos.
Las tareas del sistema que se ejecutarán están definidas en el archivo /etc/crontab.
Cada usuario también puede tener sus tareas, configuradas en archivos individuales en el directorio /var/spool/cron/ con el login de la cuenta del usuario.
El cron posee una utilidad llamada crontab que facilita la visualización y edición de los archivos del cron.
Para programar una nueva tarea, podemos utilizar el comando crontab o editar el archivo /etc/crontab con cualquier editor de texto y definir cuándo se ejecutará la tarea.
El formato que el archivo de cron usa es:
MINUTOS HORAS DIA MES SEMANA USUARIO COMANDO
Formato del Crontab |
No es necesario reiniciar el servicio del cron porque verifica sus archivos cada minuto.
El formato de un archivo crontab sigue el siguiente orden:
Los valores para cada campo pueden ser:
Minuto: Valor entre 0 y 59;
Hora: Valor entre 0 y 23;
Día del Mes: Valor entre 1 y 31;
Mes: Valor entre 1 y 12 (identificando los meses de enero a diciembre);
Día de la Semana: Valor entre 0 y 7, siendo que cero o siete se usan para identificar el domingo.
Login del Usuario: El usuario que se usará para ejecutar el comando;
Comando: Programa que se ejecutará, más sus parámetros normales.
Cada campo debe estar separado por uno o más espacios o tabulaciones.
El símbolo asterisco "*" puede usarse para indicar que cualquier fecha u hora son válidas. También es posible especificar intervalos de tiempo usando la barra "/". Ejemplo "*/5" en el campo minutos indica que el comando debe ejecutarse cada 5 minutos.
Es posible especificar intervalos para que el comando sea ejecutado mediante el guión "-", indicando los períodos de ejecución incluyendo el número inicial y final.
Una lista de horas y fechas puede hacerse utilizando la coma "," para separar los valores.
Véanse algunos ejemplos de cron:
Ejecuta el comando sync todos los días a las 10:00:
0 10 * * * root sync
Ejecuta el comando updatedb cada lunes a las 06:00:
0 6 * * 1 root updatedb
Ejecuta el comando runq todos los días cada veinte minutos:
0,20,40 * * * * root runq
Envía un correo electrónico a las 0:15 cada Navidad para carla:
15 0 25 12 * root mail carla < natal.txt
Ejecuta el comando poff a las 5:30 de lunes a sábado:
30 5 * * 1-6 root poff
Ejecuta un script PHP cada 5 minutos:
*/5 * * * * root /usr/bin/php -c /etc/php.ini /home/script.php
Archivo crontab
El comando crontab facilita la edición de los archivos de configuración del cron. Es útil para la edición de los archivos de los usuarios ubicados en /var/spool/cron/
El crontab guarda el archivo individual del cron con el nombre del login del usuario.
Este archivo tiene el mismo formato que /etc/crontab excepto por no tener el campo usuario (UID), ya que el nombre del archivo ya tiene esta identificación.
# ls –l /var/spool/cron/tabs-rw——— 1 root root 264 Jun 20 14:36 root-rw——— 1 root users 199 Jun 20 15:58 uira
Las opciones más frecuentes del crontab son:
- -e: Edita el archivo de cron utilizando el editor vi.
- -l: Lista el contenido del archivo de cron del usuario actual
- -r: Elimina el archivo de cron.
- -u usuario: Realiza una de las operaciones como si fuera un usuario determinado. Debe usarse en conjunto con las otras opciones y solo el root puede modificar el cron de otros usuarios.
Véanse los ejemplos:
En este ejemplo el comando "/usr/bin/mrtg /etc/mrtg.cfg" se ejecuta cada 5 minutos y "/bin/sendip.sh" todos los días a la 01:00am:
$ crontab –l*/5 * * * * /usr/bin/mrtg /etc/mrtg.cfg0 1 * * * /bin/sendip.sh
Para programar alguna tarea en el cron, utilize "crontab –e" para editar el archivo con vi:
$ crontab -e
Incluya una línea en blanco al final del archivo, de lo contrario el último comando no se ejecutará.
Permisos del Cron
El cron tiene dos archivos que habilitan o deshabilitan su uso por los usuarios. Dependiendo de la distribución, pueden tener nombres y lugares diferentes. Son ellos:
/etc/cron.allow
Si el archivo cron.allow existe, un usuario determinado necesita tener su login listado en su contenido para tener permisos expresos para el uso del cron.
/etc/cron.deny
Si el archivo cron.deny existe, los logins listados en su contenido tienen prohibido utilizar el cron. Los demás usuarios podrán usar el cron.
Si ninguno de los dos archivos existe, el uso del cron será permitido para todos los usuarios. Si el archivo cron.deny está vacío, todos los usuarios tendrán permiso de usar el cron.
Directorios Especiales del Cron
/etc/cron.d
El cron también cuenta con un directorio especial en /etc/cron.d. Este directorio puede contener los archivos:
- daily: especifica qué comandos se ejecutan diariamente;
- hourly: especifica qué comandos se ejecutan cada hora;
- weekly: especifica qué comandos se ejecutan cada semana;
- monthly: especifica qué comandos se ejecutan cada mes.
Los archivos contenidos en este directorio deben seguir el formato del /etc/crontab:
# cat /etc/cron.d/sysstat */10 * * * * root /usr/lib64/sa/sa1 1 153 23 * * * root /usr/lib64/sa/sa2 -A
Todos los scripts o comandos ejecutados se realizan con permiso del usuario root.
Los archivos en /etc/cron.d suelen tener su nombre precedido de un número entero mayor que cero para ordenar su ejecución
/etc/cron.{daily, hourly, weekly, monthly}
Otras posibilidades que cron examina son los directorios /etc/cron.daily, /etc/cron.hourly, /etc/cron.weekly y /etc/cron.monthly.
Estos directorios pueden contener scripts que se ejecutarán en los intervalos de tiempo que cada nombre de archivo especifica.
# ls -l /etc/cron.daily/-rwx------. 1 root root 219 Apr 10 2018 logrotate-rwxr-xr-x. 1 root root 618 Mar 17 2014 man-db.cron-rwx------. 1 root root 208 Apr 10 2018 mlocate
En estos directorios los archivos deben contener scripts con comandos que se ejecutarán, y no una programación de lo que se ejecutará como en crontab.
Vea el ejemplo del script logrotate:
$ cat /etc/cron.daily/logrotate #!/bin/sh/usr/sbin/logrotate /etc/logrotate.confexit 0
Otro detalle importante: los scripts en /etc/cron.{daily, hourly, weekly, monthly} necesitan tener el permiso ejecutable "X" habilitado.
Aprenda mucho más sobre Linux en nuestro curso en línea. Puede realizar la inscripción aquí. Si ya tiene una cuenta, o quiere crear una, simplemente ingrese o cree su usuario aquí.
¿Le gustó? Comparta
Eso fue solo una pieza. El curso enseña el camino completo — desde tu primer comando hasta el día del examen.
Formato del Crontab