C贸mo usar el comando crontab en Unix

    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 鈥嬧媡ambi茅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?

     

    Etiquetas:

    Deja una respuesta

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