fbpx Cron y Crontab en Linux: Ejemplos de tareas automáticas | Certificação Linux

Comando cron en Linux: Programa tareas automáticas con Crontab

📅 01/01/2019 ⏱ 6 min ✍️ Uira Ribeiro
Linuxcomandos
Comando cron en Linux: Programa tareas automáticas con Crontab
Exam Pass App — mais de 7.000 questões LPI, offline, em 5 idiomas, disponível no Android e na App Store
Disponible en
Google Play
Disponible en
App Store

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

Uira Ribeiro

Prof. Uirá Ribeiro

Chair do Board do Linux Professional Institute

Después de años viendo profesionales perder horas en tareas simples por no conocer las herramientas correctas de Linux, decidí enseñar.
Hoy soy autor de la mayoría de los Materiales de Aprendizaje oficiales de la LPI y mentor de más de 14,000 alumnos certificados.

Conoce mi historia completa →

Eso fue solo una pieza. El curso enseña el camino completo — desde tu primer comando hasta el día del examen.

Certificação Linux — a plataforma líder em certificações Linux no Brasil
WhatsApp