Saltar al contenido

Cómo usar cron para tareas Automatizar en Ubuntu 18.04

marzo 4, 2020

 

Una versión anterior de este tutorial fue escrito por Shaun Lewis.

Introducción

Cron es un demonio de planificación de tareas basado en el tiempo que se encuentra en Unix-como sistemas operativos, incluyendo las distribuciones de Linux. Cron ejecuta en segundo plano y las tareas programadas con cron, referido como “cron puestos de trabajo”, se ejecutan de forma automática, por lo que cron útil para automatizar tareas de mantenimiento relacionada.

Esta guía ofrece una visión general de cómo programar tareas utilizando una sintaxis especial de cron. También va sobre algunos atajos se puede utilizar para hacer los horarios de trabajo más fácil de escribir y comprender.

Requisitos previos

Para completar esta guía, tendrá acceso a un ordenador con Ubuntu 18.04. Este podría ser el equipo local, una máquina virtual o un servidor privado virtual.

Independientemente de qué tipo de equipo que utilice para seguir esta guía, debe tener un usuario no root con privilegios administrativos configurados. Para hacer esto, siga nuestra guía de configuración inicial del servidor de Ubuntu 18.04.

Instalación Cron

Casi todas las distribuciones de Linux tiene algún tipo de cron instalado por defecto. Sin embargo, si usted está utilizando una máquina de Ubuntu en el que no está instalado cron, se puede instalar utilizando APT.

Antes de instalar cron en una máquina de Ubuntu, actualizar índice de paquetes local del equipo:

sudo apt update

  • sudo update apt

Luego instalar cron con el siguiente comando:

sudo apt install cron

  • sudo apt instalar cron

que necesitará para asegurarse de que está configurado para ejecutarse en el fondo también:

sudo systemctl enable cron

  • sudo systemctl permiten cron

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

Después de eso, se instalará cron en su sistema y listo para empezar la programación de tareas.

Descripción de cómo se registran y gestionan en un archivo especial conocido como un crontab trabajos Cron Obras

Cron. Cada perfil de usuario en el sistema puede tener su propio crontab donde pueden programar los trabajos, que se almacena en / var / spool / cron / crontabs /.

Para programar un trabajo, sólo tiene que abrir su crontab para editar y añadir una tarea escrita en forma de una expresión cron . La sintaxis para la expresión cron s se puede dividir en dos elementos: el horario y el comando a ejecutar.

El comando puede ser prácticamente cualquier comando que normalmente se ejecutan en la línea de comandos. El componente de calendario de la sintaxis se divide en 5 campos diferentes, que están escritas en el siguiente orden:

En conjunto, las tareas programadas en un crontab están estructurados de la siguiente manera:

minute hour day_of_month month day_of_week command_to_run

He aquí un ejemplo funcional de una expresión cron. Esta expresión se ejecuta el comando curl http://www.google.com todos los martes a las 5:30 PM:

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

También hay algunos caracteres especiales se pueden incluir en el componente de programación de una expresión cron para hacer más fácil la 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 romper la programación de los valores para formar una lista. Si usted quiere tener una ejecución de la tarea al principio y al medio de cada hora, en lugar de escribir a cabo dos tareas separadas (por ejemplo, 0 * * * * … y 30 * * * * …), que permitan obtener el misma funcionalidad con un (0,30 * * * * …).
  • -: Un guión representa un rango de valores en el campo horario. En lugar de tener 30 tareas programadas separadas para un comando que desea ejecutar durante los primeros 30 minutos de cada hora (como en 0 * * * * …, 1 * * * * …, 2 * * * * .. ., y así sucesivamente), sólo podría programar como 0-29 * * * * ….
  • /: se puede utilizar una barra inclinada con un asterisco para expresar un valor de paso. Por ejemplo, en lugar de escribir ocho tareas cron independientes separadas para ejecutar un comando cada tres horas (como en, 0 0 * * * …, 0 3 * * * …, 0 6 * * * …, y así sucesivamente), se puede programar para que se ejecute la siguiente manera: 0 * / 3 * * * ….

Nota : no se puede expresar valores de paso de manera arbitraria; sólo se puede utilizar números enteros que dividen uniformemente en el rango permitido por el campo en cuestión. Por ejemplo, en el campo “hora” sólo se podía seguir una barra inclinada con 1, 2, 3, 4, 6, 8 o 12.

He aquí algunos ejemplos más de cómo utilizar el componente de programación de cron:

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

Si encuentra alguna de este confuso o si desea ayuda para escribir programas para sus propias tareas cron, Cronitor proporciona un editor de expresiones horario práctico cron llamado “Crontab Guru”, que se puede utilizar para comprobar si sus horarios de cron son válidos .

Gestión crontabs

Una vez que se decida por un horario y que conoce el trabajo que desea ejecutar, tendrás que ponerlo en algún lugar de su demonio será capaz de leerlo.

Como se mencionó anteriormente, un crontab es un archivo especial que mantiene el calendario de trabajos cron se ejecutará. Sin embargo, estos no están destinados a ser editado directamente. En su lugar, se recomienda que utilice el comando crontab. Esto le permite editar el crontab del perfil de usuario sin tener que cambiar sus privilegios con sudo. El comando crontab también le permitirá saber si tiene errores de sintaxis en el crontab, mientras se edita directamente no lo hará.

Puede editar su crontab con el comando siguiente:

crontab -e

  • crontab -e

Si esta es la primera vez que se ejecuta el comando crontab bajo este perfil de usuario, se le pedirá que seleccione un editor de texto predeterminado utilizar al editar el crontab:

Outputno crontab for sammy - using an empty one

Select an editor. To change later, run 'select-editor'.
1. /bin
ano <---- easiest 2. /usr/bin/vim.basic 3. /usr/bin/vim.tiny 4. /bin/ed Choose 1-4 [1]:

Introduzca el número correspondiente al editor de su elección. Como alternativa, puede simplemente pulsar ENTER para aceptar la opción por defecto, nano.

Después de hacer su selección, se le llevará a un nuevo crontab contiene algunas instrucciones comentadas a cabo 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 se ejecuta crontab -e en el futuro, que traerá su crontab en este texto editor de forma automática. Una vez en el editor, puede introducir su horario con cada trabajo en una nueva línea. De lo contrario, se puede guardar y cerrar el crontab por ahora (CTRL + X, Y, a continuación, ENTER si ha seleccionado nano).

Nota : En los sistemas Linux, hay otro crontab se almacena en el directorio / etc /. Esta es una crontab de todo el sistema que tiene un campo adicional para el que cada perfil de usuario tarea cron deben ejecutarse bajo. Este tutorial se centra en crontabs específicas del usuario, pero si usted quiere editar el crontab de todo el sistema, que podría hacerlo con el siguiente comando:

sudo nano /etc/crontab

  • sudo nano / etc / crontab

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

crontab -l

  • crontab -l

puede borrar su crontab con el comando siguiente:

Advertencia : el siguiente comando voluntad no pedirá que confirme que desea borrar el crontab. Ejecutar solamente si está seguro de que desea borrar .

crontab -r

  • crontab -r

Esto eliminará el crontab del usuario inmediatamente. Sin embargo, puede incluir la bandera -i para tener el símbolo del sistema que confirme que realmente quiere eliminar crontab del usuario:

crontab -r -i

  • crontab -r -i

Outputcrontab: really delete sammy's crontab? (y
)

Cuando se le solicite, debe introducir y eliminar la crontab o n para cancelar la eliminación. Salida

General Cron Job

Debido a los trabajos de cron se ejecutan en segundo plano, no es siempre evidente que han ejecutan correctamente. Ahora que ya sabe cómo utilizar el comando crontab y cómo programar una tarea programada, puede empezar a experimentar con algunas diferentes maneras de redirigir la salida de las tareas cron para ayudarle a rastrear que han sido ejecutados con éxito.

Si usted tiene un agente de transferencia de correo - tales como Sendmail - instalado y configurado correctamente en el servidor, puede enviar la salida de las tareas cron a la dirección de correo electrónico asociada a su perfil de usuario de Linux. También puede especificar manualmente una dirección de correo electrónico, proporcionando un mailto establecer en la parte superior de la crontab.

Por ejemplo, se podría añadir las siguientes líneas a un crontab. Estos incluyen una declaración mailto seguido de una dirección de correo electrónico ejemplo, una directiva SHELL que indica que el shell de ejecución (bash en este ejemplo), una directiva INICIO señalando el camino en el que para buscar el binario cron, y una sola tarea cron:

. . .

MAILTO="[email protected]"
SHELL=/bin/bash
HOME=/

* * * * * echo ‘Run this command every minute’

este trabajo en particular volverá “Ejecutar este comando cada minuto”, y que la producción conseguirá enviado por correo electrónico a cada minuto a la dirección de correo electrónico especificada después del mailto Directiva.

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

para anexar la salida de un comando planificado a un archivo de registro, añadir >> al final del comando seguido del nombre y la ubicación de un archivo de registro de su elección, así: digamos de

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

permiten quieren usar cron para ejecutar un script, pero que siga funcionando en el fondo. Para ello, se puede redirigir la salida de la secuencia de comandos a una ubicación vacía, como / dev / null, que elimina inmediatamente todos los datos grabados en ellos. Por ejemplo, la siguiente tarea cron ejecuta un script PHP y se ejecuta en segundo plano:

* * * * * /usr/bin/php /var/www/domain.com/backup.php > /dev
ull 2>&1

Este trabajo cron también redirige error estándar - representado por 2 - a la salida estándar (> & 1). Debido a la salida estándar ya está siendo redirigido a / dev / null, esto permite esencialmente la secuencia de comandos para ejecutar en silencio. Incluso si el crontab contiene una declaración mailto, la salida del comando no se enviará a la dirección de correo electrónico especificada.

restringiendo el acceso

Puede gestionar qué usuarios se les permite usar el comando crontab con los archivos Cron.allow y cron.deny, ambos de los cuales están almacenados en el directorio / etc /. Si el archivo existe cron.deny, cualquier usuario que aparece en ella será excluido de la edición de su crontab. Si existe cron.allow, sólo los usuarios que figuran en ella serán capaces de editar sus crontabs. Si existen los dos archivos y el mismo usuario se enumeran en cada uno, el archivo cron.allow anulará cron.deny y el usuario será capaz de editar su crontab.

Por ejemplo, para denegar el acceso a todos los usuarios y luego dar acceso al usuario Ismael , se puede utilizar la siguiente secuencia de comandos:

sudo echo ALL >>/etc/cron.deny
sudo echo ishmael >>/etc/cron.allow

  • sudo repetir todos >> /etc/cron.deny
  • sudo echo ishmael >> /etc/cron.allow

en primer lugar, bloquear todos los usuarios añadiendo ALL para el archivo cron.deny. A continuación, añadiendo el nombre de usuario para el archivo cron.allow, damos la Ismael perfil de usuario acceso para ejecutar trabajos de cron.

Tenga en cuenta que si un usuario tiene privilegios sudo, pueden modificar el crontab de otro usuario con el siguiente comando:

sudo crontab -u user -e

  • sudo crontab -u usuario -e

Sin embargo, si existe cron.deny y el usuario aparece en ella y que no se enumeran en cron.allow, recibirá el siguiente error después de ejecutar el comando anterior:

OutputThe user user cannot use this program (crontab)

Por defecto, la mayoría de los demonios cron asumirán todos los usuarios tienen acceso a cron a menos que exista ya sea cron.allow o cron.deny .

especial Sintaxis

También hay varios comandos abreviados se pueden utilizar en su archivo crontab para la planificación de tareas ayuda aerodinámica. Son esencialmente accesos directos para la programación numérica equivalente especifico:

Nota : No todos los demonios cron puede analizar esta sintaxis (en particular, las versiones anteriores), así que vuelva a comprobar que funciona antes de confiar en él.

Además, la taquigrafía @reboot va a ejecutar cualquier comando que sigue cualquier momento se inicia el servidor:

@reboot echo "System start up"

El uso de estos atajos siempre que sea posible ayuda puede hacer que sea más fácil de interpretar la Lista de tareas en su crontab.

Conclusión

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