Cómo utilizar Cron para automatizar tareas en Ubuntu 18.04

Introducción

Índice
  1. Introducción
  • Prerrequisitos
  • Instalación de Cron
  • Entendiendo cómo funciona Cron
  • Administrar crontabs
  • Gestión de la salida de trabajos cron
  • Restringir el acceso
  • Sintaxis especial
  • Conclusión
  • Cron es un demonio de programación de tareas basado en el tiempo que se encuentra en sistemas operativos tipo Unix, incluidas las distribuciones Linux. Cron se ejecuta en segundo plano y las operaciones programadas con cron, denominadas “trabajos cron”, se ejecutan automáticamente, lo que hace que cron sea útil para automatizar tareas relacionadas con el mantenimiento.

    Esta guía ofrece una descripción general de cómo programar tareas utilizando la sintaxis especial de cron. También repasa algunos atajos que puede utilizar para acelerar el proceso de escritura de programaciones de tareas y hacerlas más comprensibles.

    Prerrequisitos

    Para completar esta guía, necesitarás acceso a una computadora con Ubuntu 18.04. Puede ser tu máquina local, una máquina virtual o un servidor privado virtual.

    Independientemente del tipo de computadora que uses para seguir esta guía, debe tener configurado un usuario no root con privilegios administrativos. Para configurarlo, sigue nuestra guía de configuración inicial del servidor para Ubuntu 18.04 .

    Instalación de Cron

    Casi todas las distribuciones de Linux tienen algún tipo de croninstalado de forma predeterminada. Sin embargo, si estás usando una máquina Ubuntu en la que cronno está instalado, puedes instalarlo usando APT.

    Antes de instalarlo cronen una máquina Ubuntu, actualice el índice de paquetes local de la computadora:

    1. sudo apt update

    Luego instala croncon el siguiente comando:

    1. sudo apt install cron

    Necesitarás asegurarte de que esté configurado para ejecutarse en segundo plano también:

    1. sudo systemctl enable cron
    OutputSynchronizing state of cron.service with SysV service script with /lib/systemd/systemd-sysv-install.Executing: /lib/systemd/systemd-sysv-install enable cron

    Luego de eso, cronse instalará en su sistema y estará listo para que pueda comenzar a programar trabajos.

    Entendiendo cómo funciona Cron

    Los trabajos de cron se registran y se administran en un archivo especial conocido como crontab. Cada perfil de usuario del sistema puede tener su propio crontabarchivo donde programar trabajos, que se almacena en /var/spool/cron/crontabs/.

    Para programar un trabajo, abra su crontabcuenta para editarla y agregue una tarea escrita en forma de expresión cron . La sintaxis de las expresiones cron se puede dividir en dos elementos: la programación y el comando para ejecutar.

    El comando puede ser prácticamente cualquier comando que normalmente ejecutaría en la línea de comandos. El componente de programación de la sintaxis se divide en 5 campos diferentes, que se escriben en el siguiente orden:

    Campo Valores permitidos
    minuto 0-59
    hora 0-23
    Día del mes 1-31
    mes 1-12oJAN-DEC
    Día de la semana 0-6oSUN-SAT

    En conjunto, las tareas programadas en un crontab se estructuran de la siguiente manera:

    minute hour day_of_month month day_of_week command_to_run

    A continuación se muestra un ejemplo funcional de una expresión cron. Esta expresión ejecuta el comando curl http://www.google.comtodos los martes a las 5:30 p. m.:

    30 17 * * 2 curl http://www.google.com

    También hay algunos caracteres especiales que puedes incluir en el componente de programación de una expresión cron para agilizar las tareas de programación:

    • *:En las expresiones cron, un asterisco es una variable comodín que representa “todos”. Por lo tanto, una tarea programada con * * * * * ...se ejecutará cada minuto de cada hora de cada día de cada mes.
    • ,:Las comas dividen los valores de programación para formar una lista. Si desea que una tarea se ejecute al principio y a la mitad de cada hora, en lugar de escribir dos tareas separadas (por ejemplo, 0 * * * * ...y 30 * * * * ...), puede lograr la misma funcionalidad con una ( 0,30 * * * * ...).
    • -: Un guion representa un rango de valores en el campo de programación. En lugar de tener 30 tareas programadas independientes para un comando que desea ejecutar durante los primeros 30 minutos de cada hora (como en 0 * * * * ..., 1 * * * * ..., 2 * * * * ..., etc.), puede programarlo como 0-29 * * * * ....
    • /:Puede utilizar una barra diagonal con un asterisco para expresar un valor de paso. Por ejemplo, en lugar de escribir ocho crontareas independientes para ejecutar un comando cada tres horas (como en , 0 0 * * * ..., 0 3 * * * ..., 0 6 * * * ...etc.), podría programarlo para que se ejecute de esta manera: 0 */3 * * * ....

    Nota : No se pueden expresar valores de paso de forma arbitraria; solo se pueden utilizar números enteros que se dividan exactamente en el rango permitido por el campo en cuestión. Por ejemplo, en el campo “horas”, solo se puede seguir una barra diagonal con 1, 2, 3, 4, 6, 8o 12.

    A continuación se muestran algunos ejemplos más de cómo utilizar el componente de programación de cron:

    • * * * * *– Ejecuta el comando cada minuto.
    • 12 * * * *– Ejecute el comando 12 minutos después de cada hora.
    • 0,15,30,45 * * * *– Ejecute el comando cada 15 minutos.
    • */15 * * * *– Ejecute el comando cada 15 minutos.
    • 0 4 * * *– Ejecute el comando todos los días a las 4:00 AM.
    • 0 4 * * 2-4– Ejecute el comando todos los martes, miércoles y jueves a las 4:00 a. m.
    • 20,40 */8 * 7-12 *– Ejecutar el comando los minutos 20 y 40 de cada 8 horas todos los días de los últimos 6 meses del año.

    Si algo de esto le resulta confuso o si desea ayuda para escribir cronogramas para sus propias crontareas, Cronitor proporciona un práctico croneditor de expresiones de cronogramas llamado “Crontab Guru” que puede usar para verificar si sus croncronogramas son válidos.

    Administrar crontabs

    Una vez que hayas establecido un cronograma y sepas el trabajo que quieres ejecutar, deberás colocarlo en algún lugar donde tu demonio pueda leerlo.

    Como se mencionó anteriormente, un crontabes un archivo especial que contiene el cronograma de trabajos cronque se ejecutarán. Sin embargo, no están destinados a editarse directamente. En cambio, se recomienda que use el crontabcomando . Esto le permite editar su perfil de usuario crontabsin cambiar sus privilegios con sudo. El crontabcomando también le permitirá saber si tiene errores de sintaxis en el crontab, mientras que editarlo directamente no lo hará.

    Puedes editarlo crontabcon el siguiente comando:

    1. crontab -e

    Si es la primera vez que ejecuta el crontabcomando con este perfil de usuario, se le solicitará que seleccione un editor de texto predeterminado para usar al editar su crontab:

    Outputno crontab for sammy - using an empty oneSelect an editor.  To change later, run 'select-editor'.  1. /bin/nano        ---- easiest  2. /usr/bin/vim.basic  3. /usr/bin/vim.tiny  4. /bin/edChoose 1-4 [1]: 

    Introduzca el número correspondiente al editor de su elección. Alternativamente, puede presionar ENTERpara aceptar la opción predeterminada nano.

    Después de realizar su selección, se le dirigirá a un nuevo sitio crontabque contiene algunas instrucciones comentadas sobre cómo usarlo:

    # Edit this file to introduce tasks to be run by cron.# # Each task to run has to be defined through a single line# indicating with different fields when the task will be run# and what command to run for the task# # To define the time you can provide concrete values for# minute (m), hour (h), day of month (dom), month (mon),# and day of week (dow) or use '*' in these fields (for 'any').# # Notice that tasks will be started based on the cron's system# daemon's notion of time and timezones.# # Output of the crontab jobs (including errors) is sent through# email to the user the crontab file belongs to (unless redirected).# # For example, you can run a backup of all your user accounts# at 5 a.m every week with:# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/# # For more information see the manual pages of crontab(5) and cron(8)# # m h  dom mon dow   command

    Cuando lo ejecute crontab -een el futuro, aparecerá crontabautomáticamente en este editor de texto. Una vez en el editor, puede ingresar su cronograma con cada trabajo en una nueva línea. De lo contrario, puede guardar y cerrar el crontab por ahora ( CTRL + X, Y, entonces ENTERsi seleccionó nano).

    Nota : En los sistemas Linux, hay otro crontabalmacenado en el /etc/directorio. Se trata de un campo de todo el sistema crontabque tiene un campo adicional para el perfil de usuario cronbajo el cual se debe ejecutar cada trabajo. Este tutorial se centra en el campo específico del usuario crontabs, pero si desea editar el campo de todo el sistema crontab, puede hacerlo con el siguiente comando:

    1. sudo nano /etc/crontab

    Si desea ver el contenido de su crontab, pero no editarlo, puede utilizar el siguiente comando:

    1. crontab -l

    Puedes borrar tu crontabcon el siguiente comando:

    Advertencia : El siguiente comando no le pedirá que confirme que desea borrar su archivo crontab. Ejecútelo únicamente si está seguro de que desea borrarlo .

    1. crontab -r

    Este comando eliminará el usuario crontabinmediatamente. Sin embargo, puede incluir la -ibandera para que el comando le solicite que confirme que realmente desea eliminar el usuario crontab:

    1. crontab -r -i
    Outputcrontab: really delete sammy's crontab? (y/n)

    Cuando se le solicite, deberá ingresar ypara eliminar crontabo npara cancelar la eliminación.

    Gestión de la salida de trabajos cron

    Dado que cronlos trabajos se ejecutan en segundo plano, no siempre resulta evidente que se hayan ejecutado correctamente. Ahora que sabe cómo utilizar el crontabcomando y cómo programar un crontrabajo, puede comenzar a experimentar con diferentes formas de redirigir la salida de cronlos trabajos para ayudarle a realizar un seguimiento de su ejecución correcta.

    Si tiene un agente de transferencia de correo , como Sendmail , instalado y configurado correctamente en su servidor, puede enviar el resultado de cronlas tareas a la dirección de correo electrónico asociada con su perfil de usuario de Linux. También puede especificar manualmente una dirección de correo electrónico proporcionando una MAILTOconfiguración en la parte superior del archivo crontab.

    Por ejemplo, puede agregar las siguientes líneas a un archivo crontab. Estas incluyen una MAILTOdeclaración seguida de una dirección de correo electrónico de ejemplo, una SHELLdirectiva que indica el shell que se debe ejecutar ( bashen este ejemplo), una HOMEdirectiva que señala la ruta en la que se debe buscar el cronbinario y una sola crontarea:

    . . .MAILTO="example@digitalocean.com"SHELL=/bin/bashHOME=/* * * * * echo ‘Run this command every minute’

    Este trabajo en particular devolverá “Ejecutar este comando cada minuto”, y esa salida se enviará por correo electrónico cada minuto a la dirección de correo electrónico especificada después de la MAILTOdirectiva.

    También puede redirigir cronla salida de una tarea a un archivo de registro o a una ubicación vacía para evitar recibir un correo electrónico con la salida.

    Para agregar la salida de un comando programado a un archivo de registro, agregue al final del comando seguido del nombre y la ubicación de un archivo de registro de su elección, de esta manera:

    * * * * * echo ‘Run this command every minute’  /directory/path/file.log

    Digamos que desea cronejecutar un script pero mantenerlo en ejecución en segundo plano. Para ello, puede redirigir la salida del script a una ubicación vacía, como /dev/nulllo que elimina inmediatamente cualquier dato escrito en él. Por ejemplo, el siguiente crontrabajo ejecuta un script PHP y lo ejecuta en segundo plano:

    * * * * * /usr/bin/php /var/www/domain.com/backup.php  /dev/null 21

    Este crontrabajo también redirige el error estándar (representado por 2) a la salida estándar ( 1). Debido a que la salida estándar ya se está redirigiendo a /dev/null, esto básicamente permite que el script se ejecute de manera silenciosa. Incluso si crontabcontiene una MAILTOdeclaración, la salida del comando no se enviará a la dirección de correo electrónico especificada.

    Restringir el acceso

    Puede administrar qué usuarios tienen permiso para usar el crontabcomando con los archivos cron.allowy cron.deny, que se almacenan en el /etc/directorio. Si el cron.denyarchivo existe, cualquier usuario que figure en él no podrá editar su crontab. Si cron.allowexiste, solo los usuarios que figuren en él podrán editar sus crontabs. Si ambos archivos existen y el mismo usuario figura en cada uno, el cron.allowarchivo se sobrescribirá cron.denyy el usuario podrá editar su crontab.

    Por ejemplo, para denegar el acceso a todos los usuarios y luego dar acceso al usuario ishmael , podría utilizar la siguiente secuencia de comandos:

    1. sudo echo ALL /etc/cron.deny
    2. sudo echo ishmael /etc/cron.allow

    Primero, bloqueamos a todos los usuarios agregando datos ALLal cron.denyarchivo. Luego, agregando el nombre de usuario al cron.allowarchivo, le damos al perfil de usuario ishmael acceso para ejecutar crontrabajos.

    Tenga en cuenta que si un usuario tiene sudoprivilegios, puede editar los de otro usuario crontabcon el siguiente comando:

    1. sudo crontab -u user -e

    Sin embargo, si cron.denyexiste yusuarioestá incluido en él y no está incluido en cron.allow, recibirá el siguiente error después de ejecutar el comando anterior:

    OutputThe user user cannot use this program (crontab)

    De forma predeterminada, la mayoría de cronlos daemons asumirán que todos los usuarios tienen acceso a cronmenos que cron.allowo cron.denyexista.

    Sintaxis especial

    También hay varios comandos abreviados que puede utilizar en su crontabarchivo para ayudar a agilizar la programación de trabajos. Básicamente, son atajos para la programación numérica equivalente especificada:

    Atajo Taquigrafía para
    @hourly 0 * * * *
    @daily 0 0 * * *
    @weekly 0 0 * * 0
    @monthly 0 0 1 * *
    @yearly 0 0 1 1 *

    Nota : No todos cronlos demonios pueden analizar esta sintaxis (en particular las versiones más antiguas), así que verifique que funcione antes de confiar en ella.

    Además, la @rebootabreviatura ejecutará cualquier comando que le siga cada vez que se inicie el servidor:

    @reboot echo "System start up"

    El uso de estos atajos siempre que sea posible puede ayudar a facilitar la interpretación del cronograma de tareas en su crontab.

    Conclusión

    Cron es una utilidad flexible y potente que puede reducir la carga de muchas tareas asociadas con la administración del sistema. Cuando se combina con scripts de shell, puede automatizar tareas que normalmente son tediosas o complicadas. Por ejemplo, puede escribir un script de shell para enviar copias de seguridad de datos a una solución de almacenamiento de objetos y luego automatizarlo con cron .

    SUSCRÍBETE A NUESTRO BOLETÍN 
    No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

    Deja una respuesta

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

    Subir

    Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion