Programación de tareas del sistema con Cron en Linux

Cron es un demonio de programación que ejecuta trabajos cron a intervalos específicos. Los trabajos de Cron automatizan el mantenimiento del sistema, las tareas repetitivas o de administración, como la copia de seguridad de la base de datos o de los datos, las actualizaciones del sistema, la verificación del uso del espacio en disco, el envío de correos electrónicos, etc.

Puede programar trabajos cron para que se ejecuten por minuto, hora, día de la semana, día del mes, mes o cualquier combinación de estos.

Índice

¿Por qué Cron?

  • Cron le permite controlar cuándo se ejecuta su trabajo o tarea. Por ejemplo, puede controlar el minuto de ejecución, la hora, el día, etc.
  • Los trabajos cron no ocupan memoria cuando no se ejecutan.
  • Elimina la necesidad de escribir código lógico y en bucle para la tarea.
  • Si un trabajo no se ejecuta por alguna razón, se ejecutará nuevamente en el próximo intervalo de tiempo.

Instale y ejecute el demonio cron

La utilidad cron en Linux se instala con el paquete cronie que proporciona los servicios cron.

Compruebe si el paquete cronie está instalado o no.

[tuts@fosslinux ~]$ rpm -q cronie
cronie-1.5.7-1.fc33.x86_64

Si el paquete cronie no está presente, instálelo usando el siguiente comando para usuarios de Fedora.

[tuts@fosslinux ~]$ sudo dnf install cronie

Antes de programar cualquier tarea, debe iniciar el servicio crond (demon daemon).

Compruebe si el servicio de crond se está ejecutando o no.

[tuts@fosslinux ~]$ systemctl status crond.service
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor pre>
Active: active (running) since Tue 2021-06-08 09:14:40 EAT; 2h 58min ago
Main PID: 1671 (crond)
Tasks: 1 (limit: 3448)
Memory: 14.4M
CPU: 316ms
CGroup: /system.slice/crond.service
└─1671 /usr/sbin/crond -n

El servicio se está ejecutando si el comando indica (Activo: activo (en ejecución). Si el servicio crond no se está ejecutando, inícielo en la sesión actual con el siguiente comando.

[tuts@fosslinux ~]$ systemctl start crond.service

También puede configurar el servicio para que se inicie y se ejecute automáticamente en el momento del arranque con el siguiente comando.

[tuts@fosslinux ~]$ systemctl enable crond.service

Puede detener la ejecución del servicio crond mediante el comando stop.

[tuts@fosslinux ~]$ systemctl stop crond.service

También puede reiniciarlo nuevamente con el comando de reinicio:

[tuts@fosslinux ~]$ systemctl restart crond.service

Definir un trabajo cron

Para comprender cómo funcionan los trabajos cron, veremos un ejemplo de trabajo cron y las partes que componen un archivo de configuración crontab.
Ejemplo: un trabajo cron para extraer los últimos cambios de una rama maestra de git.

*/55 * * * *
username cd /home/username/project/shop_app && git pull origin master

El trabajo cron anterior se compone de dos partes clave:

  1. La primera parte (* / 55 * * * *) configura el temporizador para que se ejecute cada 55 minutos.
  2. La segunda parte de la configuración del trabajo cron define las declaraciones como se ejecutarían desde la línea de comandos. El comando se ejecutará como el usuario (nombre de usuario) y luego cambiará el directorio a (/ home / username / project / shop_app). La última parte ejecutará el comando git para extraer los últimos cambios en la rama maestra de su proyecto.

Usando crontab para crear un trabajo cron

Como regla general, no se supone que debe editar archivos cron directamente. En su lugar, utilice el comando crontab para crear, editar, instalar, desinstalar o enumerar los trabajos cron que se ejecutan en su sistema. Una vez que defina los trabajos cron, se ejecutarán en segundo plano y el demonio buscará constantemente nuevos trabajos cron en los directorios / etc / crontab, /etc/cron.*/ y / var / spool / cron /.

Las distribuciones basadas en RedHat, como Fedora, almacenan archivos crontab en el directorio / var / spool / cron, mientras que las distribuciones Debian y Ubuntu se encuentran en el directorio / var / spool / cron / crontabs. Los archivos crontab y los scripts de todo el sistema se almacenan en el archivo etc / crontab y en el directorio /etc/cron.d, respectivamente.

Tenga en cuenta que no tiene que reiniciar cron después de crear nuevos archivos de configuración o editar los existentes.

Operadores y sintaxis de crontab time

La primera parte de la definición de un trabajo cron es la información de tiempo. Determina cuándo y con qué frecuencia se ejecutará el trabajo cron. Consiste en el minuto, la hora, el día del mes, el mes y el día de la semana en ese orden. Puede especificar uno o más valores separados por una coma o un guión.

.---------------- minute (0 - 59)
| .------------- hour (0 - 23)
| | .---------- day of month (1 - 31)
| | | .------- month (1 - 12) OR jan,feb,mar,apr …
| | | | .---- day of week (0-6) (Sunday=0 or 7) OR sun,mon,tue,wed,thr,fri,sat
| | | | | 
| | | | | 
* * * * * username cron job command to be executed
  • * - Puede utilizar un asterisco en lugar de un valor para representar todos los valores posibles para esa posición al definir el tiempo de ejecución. Por ejemplo, si usa un asterisco en la posición de los minutos, el trabajo cron se ejecutará cada minuto.
  • - Una coma especifica una lista de valores para repetición. Por ejemplo, si especifica 2, 3, 6 en el campo Hora, el trabajo cron se ejecutará a las 2 am, 3 am y 6 am.
  • - - El guión especifica un rango de valores. Por ejemplo, si tiene 2-6 en el campo del día de la semana, el trabajo cron se ejecutará todos los días de la semana de martes a sábado.
  • /: El operador de barra inclinada especifica valores que se repetirán durante un intervalo determinado. Por ejemplo, * / 6 en el campo de la hora indica que el trabajo cron se ejecutará cada seis horas. Es similar a especificar 0,6,12,18.

Macros predefinidas

Cron tiene varias macros de programación especiales que puede utilizar para especificar intervalos comunes. Puede utilizarlos en lugar de las especificaciones de fecha y hora.

  • @reboot: la tarea especificada se ejecuta al iniciar el sistema.
  • @yearly o @annually: la tarea especificada se ejecuta una vez al año el 1 de enero a la medianoche. Es similar a 0 0 1 1 *.
  • @monthly: la tarea se ejecuta una vez al mes el primer día del mes a la medianoche. Es similar a 0 0 1 * *.
  • @weekly: la tarea especificada se ejecuta una vez a la semana a la medianoche del domingo. Es equivalente a 0 0 * * 0.
  • @daily: la tarea especificada se ejecuta una vez al día a la medianoche. Es equivalente a 0 0 * * *.
  • @hourly: la tarea se ejecuta una vez por hora al comienzo de la hora. Es similar a 0 * * * *.

Comando crontab

El comando crontab le permite instalar, abrir o ver un archivo crontab.

Cree un archivo crontab o abra uno existente con el siguiente comando:

$ crontab -e

El comando abrirá el editor vi de forma predeterminada y le permitirá definir los trabajos cron que desea ejecutar en su sistema.

Enumere todos los trabajos cron en su sistema y muestre el contenido del archivo crontab:

$ crontab -l

Enumere los trabajos cron para un usuario específico usando la opción -u:

$ crontab -u username -l

Elimine todos los trabajos cron con el comando -r:

$ crontab -r

Elimine trabajos cron para un usuario específico con el comando -r -u como usuario root:

$ crontab -r -u username

Elimine el archivo crontab actual con un mensaje antes de eliminarlo.

$ crontab -i

Variables crontab

  • RUTA = / usr / bin: / bin es la ruta crontab predeterminada. Sin embargo, puede definir una ruta al comando que está ejecutando o cambiar la variable cron $ PATH.
  • bin / sh es el shell predeterminado.
  • El entorno MAILTO define el propietario del crontab para enviar notificaciones por correo electrónico. Puede agregar la variable con una lista separada por comas de todas las direcciones de correo electrónico para recibir notificaciones por correo electrónico. Tenga en cuenta que no se enviarán correos electrónicos si la variable MAILTO está vacía (es decir, MAILTO = ”“).

Ejemplos de trabajos cron

El siguiente trabajo cron se ejecutará cada minuto:

* * * * * [cron job command]

El siguiente trabajo cron se ejecutará seis veces por hora, es decir, cada 10 minutos:

*/10 * * * * [cron job command]

Ejecute un script cada media hora y redirija la salida a '/ home / tuts / Documents':

MAILTO=email@example.com
*/30 * * * * /path/to/homescript.sh > /home/username/Documents

Utilice el operador && para ejecutar dos comandos todos los viernes a las 8 a. M.:

0 8 * * Fri commandA && commandB

Ejecute un comando una vez al mes, el quinto día del mes a las 2:00 am:
(Es decir, 5 de marzo a las 2:00 a. M., 5 de abril a las 2:00 a. M., 5 de diciembre a las 2:00 a. M., Etc.):

0 2 5 * * [cron job command]

Ejecute un script a las 10:30 a. M., Los días 3 y 23 de cada mes:

30 10 3,23 * * /path/to/fosslinuxscript.sh

Utilice el siguiente comando para configurar las variables HOME, PATH, SHELL y MAILTO personalizadas y ejecute un comando cada minuto.

HOME=/opt
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/usr/bin/zsh
MAILTO=email@example.com
*/1 * * * * [cron job command]

Sugerencias de programación

La tarea de programar trabajos cron puede ser desafiante y abrumador a medida que aumenta el número de trabajos. Los trabajos cron que se ejecutan al mismo tiempo, especialmente en entornos de producción, pueden crear graves problemas de rendimiento. Por ejemplo, las copias de seguridad del sistema y las compilaciones que se ejecutan simultáneamente consumen muchos recursos del sistema y su sistema podría quedarse sin RAM. Una forma de sortear este desafío es programar tareas que requieren muchos recursos en diferentes momentos del día, la semana o el mes. También puede agregar más memoria a su sistema o eliminar tareas mal escritas que usan una gran cantidad de memoria.

Otro desafío surge cuando su computadora está apagada durante un período en el que está programada la ejecución de un trabajo cron. Como resultado, el trabajo cron no se ejecutará hasta la próxima vez que esté programado para ejecutarse. Esto puede crear problemas, especialmente si el trabajo cron es fundamental para su sistema. Afortunadamente, Linux proporciona el programa anacron, que brinda a los usuarios la opción de programar trabajos cron a intervalos regulares. Obtenga más información en las páginas de manual de anacron.

Limitando el acceso cron

Cron proporciona una forma de controlar qué usuarios habituales del sistema tienen acceso al comando crontab. Es fundamental para limitar los errores que pueden causar que los recursos del sistema, como la memoria, se inunden. Para evitar un posible uso indebido, utilice los archivos /etc/cron.deny y /etc/cron.allow para controlar el acceso de los usuarios. Puede agregar un nombre de usuario a cualquiera de los archivos para denegar o permitir el acceso.

Es importante restringir el acceso a los trabajos cron y al comando crontab por parte de usuarios no root.

Conclusión

Cron es una herramienta principalmente para administradores de sistemas, pero también es relevante para muchas tareas de usuario. Por ejemplo, uso cron para programar tareas aburridas como copias de seguridad y aplicaciones web.

Encuentro las páginas de manual cron, crontab y anacron útiles e ingeniosas con información y consejos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir