Cómo programar trabajos de Cron con Crontab en Linux

27 feb 2021 5 min di lettura
Cómo programar trabajos de Cron con Crontab en Linux
Indice dei contenuti

Introducción

Cron es un demonio de planificación que realiza tareas a intervalos específicos. Estas tareas se denominan trabajos cron y se utilizan principalmente para automatizar el mantenimiento o la administración del sistema.

Por ejemplo, puede configurar un trabajo cron para automatizar tareas repetitivas como hacer copias de seguridad de bases de datos o datos, actualizar el sistema con los últimos parches de seguridad, verificar el uso de espacio en disco, enviar correos electrónicos, etc. Algunas aplicaciones, como Drupal, Wordpress o Magento, requieren trabajos cron para realizar determinadas tareas.

Los trabajos se pueden programar para que se ejecuten de forma crónica por minuto, hora, día del mes, mes, día de la semana o cualquier combinación de estos.

¿Qué es Crontab?

Crontab (tabla cron) es un archivo de texto que especifica la programación de trabajos cron. Hay dos tipos de archivos crontab. Archivos crontab de todo el sistema y archivos crontab de usuarios individuales.

Los archivos crontab de usuario se almacenan por nombre de usuario y su ubicación varía según el sistema operativo. En el sistema basado en Red Hat como CentOS, los archivos crontab se almacenan en el /var/spool/cron mientras que en Debian y Ubuntu los archivos se almacenan en el /var/spool/cron/crontabs.

Aunque puede editar manualmente los archivos crontab del usuario, se recomienda que utilice el comando crontab

/etc/crontab y los archivos dentro del /etc/cron.d son archivos crontab de todo el sistema que solo los administradores del sistema pueden editar.

En la mayoría de las distribuciones de Linux, también puede colocar scripts dentro de los /etc/cron.{hourly,daily,weekly,monthly} y los scripts se ejecutarán cada hour/day/week/month.

Sintaxis y operadores de Crontab

Cada línea del archivo crontab del usuario contiene seis campos separados por un espacio seguido del comando para ejecutar.

* * * * * command(s)
 - - - - -
 | | | | |
 | | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
 | | | ------- Month (1 - 12)
 | | --------- Day of month (1 - 31)
 | ----------- Hour (0 - 23)
 ------------- Minute (0 - 59)

Los primeros cinco campos pueden contener uno o más valores, separados por una coma o un rango de valores separados por un guión.

  • * El operador de asterisco indica cualquier valor o siempre. Si tiene un símbolo de asterisco en el campo Hora, significa que la tarea se ejecutará cada hora.
  • , -El operador de coma le permite especificar una lista de valores para que se repita. Por ejemplo, si tiene 1,3,5 en el campo Hora, la tarea se ejecutará a las 1:00, 3 y 5.
  • - El operador de guión le permite especificar un rango de valores. Si hay 1-5 en el campo Día de la semana, la tarea se ejecutará todos los días de la semana (de lunes a viernes).
  • / El operador de barra inclinada le permite especificar valores que se repetirán en un cierto intervalo entre sí. Por ejemplo, si tiene */4 en el campo Hora, significa que la acción se realizará cada cuatro horas. Es lo mismo que especificar 0,4,8,12,16,20. En lugar de un asterisco antes del operador de barra, también puede usar un rango de valores, 1-30/10 es lo mismo que 1,11,21.

Archivo Crontab de todo el sistema

La sintaxis de los archivos crontabs de todo el sistema es ligeramente diferente a la de los crontabs del usuario. Contiene un campo de usuario adicional obligatorio que especifica qué usuario ejecutará el trabajo cron.

* * * * * <username> command(s)

Macros predefinidas

Hay varias macros de programación Cron específicas que se utilizan para especificar intervalos comunes. Puede utilizar estos atajos en lugar de la especificación de fecha de cinco columnas.

  • @yearly (o @annually ): ejecuta la tarea especificada una vez al año a la medianoche (12:00) del 1 de enero. Equivalente a 0 0 1 1 *.
  • @monthly: ejecuta la tarea especificada una vez al mes a la medianoche del primer día del mes. Equivalente a 0 0 1 * *.
  • @weekly: ejecuta la tarea especificada una vez a la semana a la medianoche del domingo. Equivalente a 0 0 * * 0.
  • @daily: ejecuta la tarea especificada una vez al día a la medianoche. Equivalente a 0 0 * * *.
  • @hourly: ejecuta la tarea especificada una vez al comienzo de la hora. Equivalente a 0 * * * *.
  • @reboot: ejecuta la tarea especificada al inicio del sistema (tiempo de inicio).

Comando Linux Crontab

El comando crontab le permite instalar o abrir un archivo crontab para editarlo.

Puede usar el comando crontab para ver, agregar, eliminar o modificar trabajos cron mediante las siguientes opciones:

  • crontab -e: edita el archivo crontab o crea uno si aún no existe.
  • crontab -l: muestra el contenido del archivo crontab.
  • crontab -r: elimina el archivo crontab actual.
  • crontab -i: elimina el archivo crontab actual con un mensaje antes de eliminarlo.
  • crontab -u <username>: edita otros archivos crontab de uso. Requiere privilegios de administrador del sistema.

El comando crontab abre el archivo crontab utilizando el editor especificado por las EDITOR entorno VISUAL o EDITOR.

Variables crontab

El demonio cron establece automáticamente varias variables de entorno.

  • La ruta predeterminada se establece en PATH=/usr/bin:/bin. Si el comando que está llamando existe en la ruta cron especificada, puede usar la ruta absoluta del comando o cambiar la variable cron $PATH No puede agregar implícitamente :$PATH como lo haría con un script normal.
  • El shell predeterminado se establece en /bin/sh. Se puede configurar un shell diferente cambiando la variable SHELL
  • Cron invoca el comando desde el directorio de inicio del usuario. La HOME puede ser anulada por la configuración del crontab.
  • El correo electrónico de notificación se envía al propietario de crontab. Para anular el comportamiento predeterminado, puede utilizar la MAILTO con una lista (separada por comas) de todas las direcciones de correo electrónico que desea recibir notificaciones por correo electrónico. Si MAILTO está definido pero vacío ( MAILTO="" ), no se envía ningún correo.

Restricciones de crontab

Los administradores del sistema pueden controlar qué usuarios tienen acceso al crontab mediante los archivos /etc/cron.deny y /etc/cron.allow Los archivos constan de una lista de nombres de usuario, un nombre de usuario por línea.

Por defecto /etc/cron.deny solo existe el archivo y está vacío, lo que significa que todos los usuarios pueden usar el comando crontab. Si desea denegar el acceso a los comandos crontab a un usuario específico, agregue el nombre de usuario a este archivo.

Si el /etc/cron.allow existe, solo los usuarios enumerados en este archivo pueden usar el comando crontab

Si no existe ninguno de los archivos, solo los usuarios con privilegios administrativos pueden utilizar el comando crontab

Ejemplos de trabajos cron

A continuación, se muestran algunos ejemplos de trabajos cron que le mostrarán cómo programar una tarea para que se ejecute en diferentes períodos de tiempo.

Ejecute un comando a las 3:00 p.m. todos los días de lunes a viernes:

0 15 * * 1-5 command

Ejecute un script cada 5 minutos y redirija la salida estándar a dev null, solo se enviará el error estándar a la dirección de correo electrónico especificada:

[email protected]
 */5 * * * * /path/to/script.sh > /dev/null

Ejecute dos comandos todos los lunes a las 15:00 (use el && entre los comandos):

0 15 * * Mon command1 && command2

Ejecute un script PHP cada 2 minutos y escriba la salida en un archivo:

*/2 * * * * /usr/bin/php /path/to/script.php >> /var/log/script.log

Ejecute un script todos los días, cada hora, cada hora, de 8:00 a 16:00:

00 08-16 * * * /path/to/script.sh

Ejecute un script el primer lunes de cada mes, a las 7 a. M.

0 7 1-7 * 1 /path/to/script.sh

Ejecute un script a las 21:15 h los días 1 y 15 de cada mes:

15 9 1,15 * * /path/to/script.sh

Configure las variables personalizadas HOME, PATH, SHELL y MAILTO y ejecute un comando cada minuto.

HOME=/opt
 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
 SHELL=/usr/bin/zsh
 [email protected]

 */1 * * * * command

Conclusión

Aprendió a crear trabajos cron y programar tareas en una fecha y hora específicas.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.