¿Qué es un trabajo cron y cómo se utilizan? – CloudSavvy IT

Reloj y hora
Tetiana Yurchenko / Shutterstock

La cron La utilidad se utiliza para ejecutar scripts y comandos a intervalos regulares y en fechas y horas específicas. Está integrado en la mayoría de las distribuciones de Linux y proporciona una forma muy útil de programar tareas en su servidor.

cron es una herramienta de automatización, por lo que cualquier cosa que ejecute de forma regular probablemente se pueda cambiar a un trabajo cron. Si desea realizar copias de seguridad diarias periódicas o reiniciar un servicio una vez a la semana, cron puedo hacer eso.

¿Cómo funciona Cron?

Los trabajos cron se definen en un archivo llamado crontab. Este archivo es único para cada usuario y, aunque normalmente se encuentran en /var/spool/cron/crontabs, no están pensados ​​para editarse directamente. En su lugar, los edita a través del crontab mando:

crontab -e

Esto abrirá el crontab de su usuario en su editor de texto CLI predeterminado. Si esto lo tiene atascado en vim, puede cambiar el editor predeterminado ejecutando select-editor en algunos sistemas, o agregando export VISUAL=micro; para usted ~/.bashrc (o equivalente de shell).

De forma predeterminada, es probable que su crontab esté en blanco, por lo que tendrá que agregar trabajos manualmente. Un trabajo cron generalmente se formatea como:

minute hour day month weekday  <command-to-execute>

El comando a ejecutar puede ser cualquier cosa, incluidos los scripts de shell.

Los valores de cada variable de tiempo pueden ser comodines, que cron interpretará como siempre verdaderos. Por ejemplo, si quisiera ejecutar un trabajo quince minutos después de cada hora, todos los días, usaría:

15 * * * * command

Esto se ejecutará en el minuto 15 de cada hora, cada día, cada mes, sin importar el día de la semana.

Si quisiera ejecutar un trabajo a las 5:30 p. M. Todos los viernes, usaría:

30 17 * * 5 command

cron también admite valores escalonados y escalonados. Los valores de rango incluyen todos los valores dentro de un rango específico. Si quisiera ejecutar un trabajo cada hora mientras trabaja, usaría:

0 9-17 * * 1-5 command

De 9 a. M. A 5 p. M., De lunes a viernes. Del mismo modo, puede definir una lista de valores separándolos con comas.

Los valores escalonados se ejecutan a intervalos más específicos. Puede ejecutar trabajos cada dos horas utilizando:

0 */2 * * * command

Tenga en cuenta que el reloj comienza a la medianoche, 00:00. Su trabajo se ejecutará una vez, luego a las 2 a.m., luego a las 4 a.m. y así sucesivamente.

Algunas versiones de cron admite más sintaxis, como @daily correr una vez al día, o @reboot para ejecutarse en cada reinicio, aunque su distribución puede variar.

Si desea una forma sencilla de depurar cron sintaxis, hay muchos editores en línea como crontab.guru que le mostrará lo que significa la expresión de su horario en términos simples, es decir, «A minuto 0 cada segunda hora. «

RELACIONADOS: Cómo utilizar Cron con sus contenedores Docker

Asegurándose de que Cron esté funcionando

Cron no le muestra ningún indicio de que esté ejecutando sus trabajos. Si desea saber si está funcionando, deberá redirigir la salida manualmente. Puede hacer esto canalizando la salida a un archivo de registro:

* * * * * echo "test" >> logfile 2>&1

La >> el operador agrega la salida a un archivo, y el 2>&1 El operador se asegura de incluir stderr en la salida. El equivalente de bash sería &>> en lugar del >>, pero eso puede no funcionar en todas las distribuciones, ya que cron usa /bin/sh por defecto.

Cron se puede configurar para enviar correos electrónicos con la salida de trabajos. En realidad, lo hace de forma predeterminada con la dirección de correo electrónico predeterminada de su cuenta de usuario, pero es probable que no esté configurada correctamente. Para que el correo electrónico funcione, necesitará un agente de correo configurado y configurado en su servidor, lo que le permitirá utilizar el mail comando para enviar correos electrónicos. Luego, coloque esta línea encima de sus trabajos cron en su trabajo cron:

MAILTO="yourname@gmail.com"

Ahora, cualquier salida de cualquier trabajo que vaya a stdout (por ejemplo, no está canalizada en alguna parte) se enviará a través de mail a la dirección que especificó. Puede probar esto agregando un trabajo temporal para hacer eco en stdout cada minuto:

* * * * * echo "cron mail is working!"

Solo asegúrese de apagar ese trabajo una vez que esté funcionando, o se volverá molesto muy rápidamente.

Cron usa / bin / sh por defecto, no Bash

Es posible que esté usando un caparazón diferente al cron ejecuta sus trabajos en. Bash (/bin/bash) es un shell común en la mayoría de las distribuciones y es una implementación de sh. La /bin/sh el archivo es un enlace simbólico a un sh implementación, pero no siempre es bash. En sistemas basados ​​en Debian como Ubuntu y en macOS, /bin/sh enlaces a dash por defecto.

El resultado final de esta confusión es que es posible que sus scripts no se ejecuten igual y que su variable PATH (entre otras) no esté configurada correctamente. Puede evitar esto de varias maneras, y la variante de su distribución de cron puede funcionar de manera diferente, por lo que es posible que deba probar un par:

  • Añadiendo SHELL=/bin/bash en la parte superior de su crontab. Es posible que también tenga que agregar BASH_ENV="/root/.bashrc" para que lea su perfil de bash.
  • Poniendo /bin/bash antes del comando en cada trabajo. Es posible que deba configurar el BASH_ENV variable incluso si no está cambiando a bash globalmente.
  • Usando el bash shebang #!/bin/bash en la parte superior de cada guión. Esto requiere que tenga cada trabajo en su propio archivo de secuencia de comandos.

En cualquier caso, debe depurar sus trabajos cron configurándolos para que se ejecuten unos minutos antes antes de considerarlos confiables.

Actualización manual de su Crontab

Si prefiere no administrar su crontab a través de crontab -e, hay un método mejor que puedes usar. El comando crontab -l mostrará el contenido de su crontab, y puede canalizarlo a un archivo:

crontab -l > my_crontab

Y luego cargue ese archivo en otro sistema, e ‘instálelo’ con:

crontab my_crontab

De esta manera, no causará ningún error al editarlo directamente, ya que todavía está cargado en cron.

Deja un comentario

En esta web usamos cookies para personalizar tu experiencia de usuario.    Política de cookies
Privacidad