Cómo usar el comando crontab en Unix

C

Introducción

Al administrar una computadora, es posible que deseemos automatizar algunas tareas para que se ejecuten en ciertos períodos o a la misma hora todos los días / semanas / meses. En un escritorio, podemos programar comprobaciones de actualizaciones o análisis de virus. En un servidor, no es raro que se programen una gran cantidad de comprobaciones y rutinas de limpieza para garantizar que las aplicaciones se ejecuten de manera óptima.

En este artículo, veremos el cron programa. Esta utilidad es un programador de tareas para sistemas similares a Unix. Después de repasar los conceptos básicos de cron, veremos el crontab comando para gestionar nuestras tareas programadas.

¿Qué es Cron? ¿Qué es un Crontab?

Para dominar cron y programación, es útil tener una comprensión de la terminología utilizada, variada pero similar.

Cron es el programa que programa scripts o comandos para que se ejecuten en momentos especificados por el usuario. Una expresión cron es una cadena que detalla la programación para activar un comando. Una tabla cron es un archivo de configuración que contiene los comandos de shell en cada línea precedidos por una expresión cron.

Aquí hay una imagen con un crontab del sistema que hace referencia a dos scripts externos:

Generalmente, las tablas cron se ven así:

<cron-expression> <command>
<cron-expression> <command>

Cuando su computadora se inicia por primera vez, cron busca todos los crontabs en directorios configurados por el sistema. El directorio varía de un sistema operativo a otro, pero normalmente es /etc/crontab para crontabs especiales para todo el sistema y un directorio local para el usuario que inició sesión. Ambos se cargan en la memoria.

El programa cron se activa cada minuto y verifica el crontab en la memoria para ver si es necesario ejecutar algún comando en el minuto actual. Ejecuta todos los comandos programados y vuelve a dormir.

Hay dos métodos mediante los cuales se pueden programar los trabajos cron:

  • Edite el crontab directamente

Podemos ver los trabajos cron que hemos programado ejecutando este comando:

$ crontab -l

Si quisiéramos agregar o editar un trabajo cron, podemos usar este comando:

$ crontab -e

Este es el método preferido para editar crontabs porque selecciona el crontab del usuario y no el del sistema, y ​​también detecta errores de sintaxis.

  • Copiar los scripts al /etc/cron.* directorios **

Si no se requiere programar los scripts para intervalos de tiempo precisos, los scripts también se pueden mover dentro de ciertas carpetas de programación cron preconstruidas, para que el crontab los recoja para su ejecución. Estos directorios predefinidos que actúan como marcadores de posición incluyen:

Calendario de ejecución de la ubicación

/etc/cron.hourly/Una vez cada hora
/etc/cron.daily/Una vez al día, todos los días
/etc/cron.monthly/Una vez al mes, todos los meses
/etc/cron.weekly/Una vez por semana, todas las semanas

Los usuarios pueden copiar sus scripts en los directorios apropiados según la frecuencia con la que necesiten ejecutarse. El archivo crontab presente en /etc/crontab contiene las expresiones cron definidas para cada directorio y comprueba cada minuto si es el momento adecuado para que se ejecuten los scripts:

Tenga en cuenta que los scripts ubicados en estas carpetas especiales son trabajos cron de todo el sistema y no específicos del usuario.

Crear una expresión de cron

Cada entrada del crontab contiene una expresión cron, un nombre de usuario y el comando que se ejecutará separados por espacios en blanco o pestañas:

  *  *  *  *  * user-name command-or-file-to-be-executed
# <-----------> <-------> <---------------------------->
#      Cron
#   Expression

Nota: Los user-name La columna se usa al editar el crontab de todo el sistema. Un crontab específico del usuario no lo necesita porque esa información ya se conoce.

Los 5 asteriscos (* * * * *) en la expresión cron se puede sustituir por números. Sus posiciones indican su valor:

* Posición Descripción Valores numéricos permitidos

1Minuto0-59
2Hora0-23
3Dia del mes1-31
4Mes0-12
5Día de la semana [0 represents Sunday & Saturday represents 6]0-6

Además de los números, hay caracteres especiales que podemos usar al editar un crontab:

Descripción de los personajes

*Definir esto ejecutará el comando para cada período de tiempo. Por ejemplo, * definido en la columna de minutos, ejecutará el script cada minuto
,Para repetir una tarea en varios períodos de tiempo diferentes, se pueden usar comas. Por ejemplo, para ejecutar un script cada 10 minutos, la columna de los minutos se puede dar como 0,10,20,30,40,50
/Una versión alternativa y más simple de “,”. Para ejecutar un script cada 10 minutos, la columna de minutos se puede dar como * / 10
Especifica un rango de valores. Para ejecutar un script cada minuto durante los primeros 10 minutos, la expresión en la columna de los minutos se puede dar como: 0-10

Son muchas opciones para entender, lo mejor sería mostrar cómo funcionan con algunos ejemplos:

  • He aquí cómo correr echo "hello there!" el “cuarto día de cada semana” (es decir, el jueves) a las 12:10 horas:
10 12 * * 4 root echo "hello there!"
  • Y aquí hay un ejemplo más complicado en el que ahorramos el uso del disco cada 20 minutos durante los primeros 10 días de los últimos tres meses del año:
*/20 * 1-10 10,11,12 * df -h >> /tmp/diskusage

Las expresiones cron pueden resultar abrumadoras a primera vista. Existen numerosas herramientas disponibles en línea para simplificar la creación de expresiones; crontab.guru es una de las herramientas más populares disponibles en línea en https://crontab.guru/.

Usemos crontab.guru para verificar si nuestro segundo expreso es válido: https://crontab.guru/#*/20_*_1-10_10,11,12_*.

Guía práctica: creación de un trabajo cron para enviar por correo electrónico el uso del disco y la memoria

En un departamento de TI, los administradores de sistemas y otros operadores monitorean con frecuencia los recursos de la computadora, como la memoria y el tamaño del disco. Crontab se usa comúnmente para garantizar que los scripts de monitoreo se ejecuten de forma continua.

Vamos a crear un trabajo cron que monitorea el uso del disco y la RAM usando Watchmon. Si alguna de las métricas está por encima de cierto umbral, recibiremos un correo electrónico para alertarnos. Pondremos este script en un trabajo cron que se ejecuta cada minuto.

La siguiente demostración se probó en Ubuntu 20.04.1 LTS. Este ejemplo está configurado para enviar un correo electrónico a una cuenta de Gmail, es posible que deba modificar sus configuraciones para otros proveedores de correo electrónico.

  • Primero necesitas instalar watchmon. Siga su README para aprender a configurarlo:
> git clone https://github.com/datawrangl3r/watchmon
> cd watchmon
> bash setup.sh
  • El script iniciará el proceso cron, instalar http://www.mutt.org/, un cliente SMTP de línea de comandos, para enviar correos electrónicos. Una vez instalado, use su editor de texto para mutt.rc archivo en su directorio de inicio: /home/user/mutt/mutt.rc.

Edite su archivo para que se vea así, cambiando los datos de la plantilla con su correo electrónico:

set ssl_starttls=yes
set ssl_force_tls=yes

set imap_user = "[email protected]"
set imap_pass = "PASSWORD"

set from="[email protected]"
set realname="Your Name"

set folder = "imaps://imap.gmail.com/"
set spoolfile = "imaps://imap.gmail.com/INBOX"
set postponed="imaps://imap.gmail.com/[Gmail]/Drafts"

set header_cache = "~/.mutt/cache/headers"
set message_cachedir = "~/.mutt/cache/bodies"
set certificate_file = "~/.mutt/certificates"

set smtp_url = "smtps://[email protected]:[email protected]:465/"

set move = no
set imap_keepalive = 900
  • Dado que Google no permite que sus servicios sean accesibles por aplicaciones menos seguras, necesitamos habilitar el acceso para que la cuenta de correo electrónico se use en la configuración SMTP. Visitar https://myaccount.google.com/securityy active el acceso de la aplicación menos segura a ON, como se muestra en el siguiente gif:
  • Ahora que nuestros scripts y configuraciones de cuentas de correo electrónico están listos, podemos configurar nuestro crontab. Edite su crontab invocando:
$ crontab -e

Ahora ingrese la expresión cron correspondiente y la ruta al ejecutable con argumentos. Tenga en cuenta que la ruta en su máquina diferirá de lo que se muestra a continuación:

* * * * * /mnt/c/Users/sathy/Documents/datawrangler/watchmon/watchmon.sh -t=40 [email protected]

Esto se puede configurar como se muestra a continuación:

La utilidad cron se asegura de ejecutar el script cada minuto y, como resultado, se envía un correo electrónico desde la máquina a los destinatarios hasta que se borre el espacio en disco o la memoria de la máquina.

Trabajos cron y lidiar con fallas

Aunque los crontabs son muy poderosos, no pueden alertar al usuario si un trabajo subyacente no se activa o el ejecutable programado encuentra un error. Los registros de cada ejecución de trabajo se pueden encontrar en la /var/log/syslog archivo. Asegúrese de revisar sus registros después de programar las actividades.

Aparte de los errores cron y de comando, muchas crontabs están plagadas de errores humanos. Al configurar trabajos cron, aquí hay algunas razones comunes por las que es posible que su trabajo cron no se ejecute como esperaría:

  • Los scripts no tienen permiso de ejecución. Los ejecutables que se ejecutarán como trabajos cron deben tener el permiso como 755 es decir, rwx-rw-rw. La utilidad cron solo puede ejecutar scripts si el usuario tiene permisos de ejecución para ello.
  • El crontab es sintácticamente correcto pero se utilizó la ruta incorrecta para los trabajos. Es importante especificar la ruta absoluta al ejecutable y el comando en sí. Los caminos relativos deben evitarse a toda costa.
  • El comando o script no se está ejecutando con las variables de entorno necesarias para funcionar. En estos casos, asegúrese de que el script que ejecute pueda configurar las variables env necesarias cuando se ejecute como un trabajo cron.

Conclusión

En este artículo, hemos analizado el programa cron, las expresiones cron y las crontabs. Usamos el crontab comando para listar y editar trabajos cron. Las Crontabs son algunas de las mejores herramientas para que los sistemas similares a Unix puedan automatizar tareas repetitivas. ¿Qué programarías con un trabajo cron?

 

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad