GNU/Linux >> Tutoriales Linux >  >> Linux

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 cron automatizan el mantenimiento del sistema, las tareas repetitivas o de administración, como la base de datos o la copia de seguridad 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.

¿Por qué Cron?

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

Instalar y ejecutar 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 (demonio cron).

Compruebe si el servicio 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 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 con el comando de detención.

[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 declaraciones como si se ejecutaran 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 obtener los últimos cambios en la rama principal de su proyecto.

Uso de crontab para crear un trabajo cron

Como regla general, se supone que no debe editar archivos cron directamente. En su lugar, use 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 daemon buscará constantemente nuevos trabajos cron en el archivo /etc/crontab, /etc/cron.*/ y /var/spool/cron/ directorios.

Las distribuciones basadas en RedHat como Fedora almacenan archivos crontab en el directorio /var/spool/cron, mientras que las distribuciones Debian y Ubuntu en el directorio /var/spool/cron/crontabs. Los archivos y scripts crontab 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.

Sintaxis y operadores de tiempo crontab

La primera parte de una definición de trabajo cron es la información de tiempo. Determina cuándo y con qué frecuencia se ejecutará el trabajo cron. Consta del minuto, hora, día del mes, mes, 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 usar 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 repetir. 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 diagonal especifica valores que se repetirán durante un cierto intervalo. 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 predefinidos

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

  • @reboot:la tarea especificada se ejecuta al iniciar el sistema.
  •  @anualmente o @anualmente: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 por 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 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 raíz:

$ crontab -r -u username

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

$ crontab -i

Variables de tabulación

  •  PATH=/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':

[email protected]
*/30 * * * * /path/to/homescript.sh > /home/username/Documents

Utilice el operador &¶ 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 a. m.:
(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 am, 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 personalizadas HOME, PATH, SHELL y MAILTO 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
[email protected]
*/1 * * * * [cron job command]

Consejos de programación

La tarea de programar trabajos cron puede ser desafiante y desalentadora a medida que aumenta la cantidad de trabajos. Los trabajos cron que se ejecutan al mismo tiempo, especialmente en entornos de producción, pueden crear problemas de rendimiento graves. 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 superar 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 podría crear problemas, especialmente si el trabajo cron es crítico 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 man de anacron.

Limitación del 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 podrían 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 los usuarios. Por ejemplo, uso cron para programar tareas aburridas como copias de seguridad y aplicaciones web.

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


Linux
  1. Programación de tareas con el comando cron de Linux

  2. Consejos de Linux para usar cron para programar tareas

  3. Supervise su sistema Linux en su terminal con procps-ng

  4. Mejore el rendimiento del sistema Linux con noatime

  5. Comando de apagado de Linux (con ejemplos)

¿Qué es Crontab y cómo automatizar tareas en Linux con Crontab?

Encuentre información de hardware del sistema Linux con Hwinfo

Cómo ver las estadísticas del sistema Linux con Saidar

Cómo automatizar tareas con trabajos cron en Linux

Programación con cron &At

Entendiendo Crontab en Linux con ejemplos