Cron Guide 00 Featured Image

La guía para principiantes sobre el uso de Cron en Linux

Cron es una utilidad UNIX simple que administra y programa la ejecución de comandos en su computadora. Fue desarrollado por primera vez en 1987 por Paul Vixie y desde entonces se ha convertido en una herramienta invaluable en los sistemas operativos basados ​​en Linux tanto para administradores como para usuarios.

Hoy en día, hay una serie de implementaciones y reescrituras de cron que puede instalar fácilmente en su sistema Linux. A pesar de las diferencias, todos estos programas comparten el mismo linaje de Vixie Cron.

Como tal, este artículo tiene como objetivo proporcionar una descripción general básica de cómo funciona el cron original de Vixie, su sintaxis y cómo puede usarlo para programar tareas en su sistema Linux.

¿Cómo funciona Cron?

Cron es una utilidad UNIX increíblemente simple. Funciona en dos partes. Cron primero se ejecuta como un proceso en segundo plano que comienza cuando inicia su sistema por primera vez.

A partir de ahí, lee un archivo específico cada minuto. Este archivo contiene una lista de comandos que, a su vez, consta de un código de tiempo y una ruta de archivo para cada script o programa que desee ejecutar.

Guía de Cron 03 Crontab de muestra

Este enfoque permite que cron sea muy flexible en sistemas grandes. Por ejemplo, las implementaciones modernas de cron, como Cronie, solo ejecutan una única instancia de cron, incluso si esa máquina alberga varios usuarios.

Guía de Cron 04 Crontab local

Cronie lo hace posible proporcionando crontabs locales para cada usuario instalado en el sistema. Como tal, cron solo necesita saber quién es el propietario de crontab, el nivel de permiso de ese usuario y los comandos dentro de crontab.

Esto no solo hace que el sistema sea más eficiente sino también más seguro al reducir la cantidad de programas privilegiados que se ejecutan en la memoria.

Crontab: El corazón de Cron

Cada implementación de cron usa alguna forma de crontab. Este es un archivo de texto simple que contiene todos los comandos que cron ejecutará para ese usuario en particular. Como se describió anteriormente, cada usuario en el sistema tiene su propio crontab. Pueden ver ejecutando el siguiente comando:

Guía de Cron 05 Lista Crontab

Esto imprimirá el contenido del crontab del usuario actual en la salida estándar. Esto puede ser increíblemente útil si solo desea ver rápidamente qué comandos está ejecutando cron para ese usuario.

Para editarlo, deberá ejecutar el comando:

Esto le indicará a cron que ejecute su editor de texto predeterminado y cargue el archivo crontab dentro de él. Hacer eso le permitirá editar el archivo crontab.

Guía de Cron 06 Crontab Editor

La sintaxis crontab

La sintaxis del archivo crontab es increíblemente simple. Una sola línea en este archivo indicará un comando correspondiente que debe ejecutarse para ese usuario en particular. La forma general de un comando crontab se parece a esto:

m h d mon dow [flags] command

El intervalo de tiempo es un campo de cinco dígitos donde puede decirle a cron con qué frecuencia desea ejecutar un comando. Esta es la característica central de cualquier implementación de cron y le permite ser específico y flexible con la forma en que cron trata las tareas recurrentes.

  • m = minuto entre 0 y 59
  • h = hora entre 0 y 23
  • d = día del mes entre 1 y 31
  • mon = mes entre 1 y 12
  • dow = día de la semana entre 0 y 6. Cero es domingo.

los flags El campo es un conjunto de opciones que modifican el comportamiento de cron para un solo comando. Por ejemplo, puede incluir el -n opción para evitar que cron envíe correo del sistema.

los command El campo es el comando cron se ejecutará a intervalos establecidos. Puede ser un script de shell que haya escrito o una ruta de programa con banderas.

Guía Cron 07 Línea Crontab

Sabiendo eso, puede usar todos estos juntos en una sola línea crontab para crear intervalos de tiempo específicos para sus tareas. Por ejemplo, puedo ejecutar un script en mi sistema Ubuntu cada 24 de julio a las 2:30 am escribiendo la siguiente línea crontab:

30 2 24 7 * /home/$USER/myscript.sh

Guía de Cron 08 Crontab altamente específico

Nota: Se recomienda ejecutar un cronjob en un número de minutos «poco común» (11, 27 34, etc.) para evitar que diferentes trabajos cron se superpongan entre sí.

Códigos cortos

Crontab le permite usar algunos códigos cortos para que sus entradas cron sean más fáciles de leer.

  • @reboot – Ejecutar una vez, al inicio
  • @yearly – Ejecutar una vez al año, “0 0 1 1 *”.
  • @annually – igual que @anual
  • @monthly – Ejecutar una vez al mes, “0 0 1 * *”
  • @weekly – Ejecutar una vez por semana, “0 0 * * 0”
  • @daily – Ejecutar una vez al día, “0 0 * * *”
  • @midnight – igual que @daily
  • @hourly – Ejecutar una vez por hora, “0 * * * *”

Por ejemplo:

@daily ramces /home/ramces/.scripts/file-backup.sh

los @reboot shortcode le permite crear scripts para ejecutar al inicio:

@reboot /home/ramces/.scripts/bootup.sh

Esto puede ser increíblemente útil si desea crear una forma de garantizar que los comandos se ejecuten tan pronto como encienda la máquina.

Nota: Dependiendo de la configuración de su sistema, el @reboot shortcode puede o no funcionar según lo previsto en su sistema.

Crontabs del sistema

Otra característica brillante de cron es que puede administrar tareas recurrentes en todo el sistema, ya que también puede crear archivos crontab raíz. Esto puede ser increíblemente útil si desea automatizar el mantenimiento y las actualizaciones del sistema.

Para crear un crontab raíz, solo tienes que usar sudo con el comando, o inicie sesión en su cuenta raíz:

Guía de Cron 10 Root Crontab Editor

El crontab del sistema sigue en gran medida el mismo formato que el crontab del usuario. Sin embargo, una diferencia clave entre los dos es que el crontab raíz le permite ejecutar comandos como cualquier usuario en el sistema:

m h d mon dow user [flags] "command"

Sabiendo eso, puede usar esto para crear comandos recurrentes tanto de usuario como de nivel raíz dentro del mismo crontab:

30 2 * * sun root /bin/apt update
30 5 * * * ramces /home/ramces/.scripts/file-backup.sh

Hacerlo de esta manera me permite conservar los permisos de mis archivos y al mismo tiempo tener un solo lugar donde puedo editar los comandos que quiero ejecutar.

Guía de Cron 11 Formato específico de Crontab

Edición de entradas cron como otro usuario

Si en lugar de editar el crontab como usuario root, desea programar el trabajo cron como otro usuario, también es posible con el -u bandera.

sudo crontab -u username -e

Por ejemplo, para ejecutar un trabajo cron como el usuario «www-data», use el siguiente comando:

sudo crontab -u www-data -e

Revisando la actividad de cron

Aunque ahora está configurado para ejecutar comandos o secuencias de comandos específicos, es posible que desee asegurarse de que se ejecute. Está integrado en cron que una vez que se ejecuta un comando, enviará un correo electrónico al propietario del cron. Esto se puede cambiar con la variable «MAILTO».

cron-mailto-variable

agregando MAILTO=youremail@yourdomain.com enviará todos los informes de trabajos cron a un correo electrónico específico. Esta variable normalmente se puede encontrar en la parte superior de la pantalla de edición crontab. Sin embargo, si no está allí, puede agregar la variable y funcionará como se esperaba.

Varias direcciones de correo electrónico se pueden separar con una coma. Si necesita un comando diferente enviado por correo electrónico a otro lugar, puede agregar el comando MAILTO directamente encima del comando. Los comandos posteriores a ese mailto se enviarán por correo electrónico a la nueva dirección. Si te vas MAILTO= en blanco, las notificaciones se enviarán al propietario de la entrada cron.

Si no desea recibir ningún correo electrónico, también puede consultar los registros cron. En la mayoría de los sistemas, el acceso a los registros cron requerirá permisos de superusuario. El registro cron se puede encontrar en «/var/log». El archivo cron o syslog mostrará el registro de las entradas cron ejecutadas.

Preguntas frecuentes

¿Por qué mi comando cron se ejecuta cada minuto en lugar de una vez por hora?

Este es uno de los errores más comunes al administrar crontabs. De forma predeterminada, agregar un valor de asterisco en un código de tiempo significa que se ejecutará para cada instancia posible para ese valor. Por ejemplo, un valor de 0 12 * * * le dirá a cron que desea ejecutar un comando una vez al día a las 12:00 p.m.

Sin embargo, la mayoría de los principiantes suelen escribir el mismo código de tiempo que * 12 * * *. Escribirlo de esta manera significará que el comando se ejecutará una vez por minuto desde las 12:00 p. m. hasta las 12:59 p. m. Como tal, es una buena práctica escribir 0 en el campo de los minutos para asegurarse de que el comando solo se ejecute una vez.

¿Hay alguna otra opción que pueda usar con cron?

Aparte de -n y MAILTO variables, también puede utilizar el -s comando para decirle al programa que sea estricto con los comandos en ejecución. El uso de esta opción obligará a cron a centrarse solo en el comando actual hasta que finalice. Esto puede ser increíblemente útil si su máquina usa un conjunto de comandos que deben ejecutarse en un orden específico.

También puede utilizar el SHELL variable para hacer que cron use un shell diferente para sus comandos. Por ejemplo: SHELL=/bin/ksh

Credito de imagen: Unsplash

Deja un comentario

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

Experto Geek - Tu Guía en Tendencias Tecnológicas