GNU/Linux >> Tutoriales Linux >  >> Linux

Cron Jobs y Crontab en Linux explicados

Este tutorial es una guía completa sobre la comprensión de cron en Linux, así como la función del archivo crontab.

Como administrador del sistema, es muy probable que pase mucho tiempo realizando tareas recurrentes en su sistema .

Por suerte para ti, hay una forma de automatizar tareas en sistemas Linux:trabajos cron .

Construido inicialmente en 1975 por AT&T Bell Laboratories, cron ha evolucionado hasta convertirse en una referencia en Linux cuando se trata de programar y ejecutar tareas en fechas o períodos fijos.

En el tutorial de hoy, vamos a echar un vistazo al daemon cron , trabajos cron y el comando crontab en Linux.

También señalaremos la diferencia entre los trabajos cron definidos por el usuario y los trabajos cron definidos por el sistema.

¿Listo?

¿Qué son Cron y Cron Jobs?

Cron es un demonio del sistema que se ejecuta en cualquier sistema Linux y es responsable de detectar trabajos cron y ejecutarlos en intervalos determinados.

Cron se ejecuta cada minuto e inspeccionará un conjunto de directorios predefinidos en su sistema de archivos para ver si es necesario ejecutar tareas.

Por otro lado, los trabajos cron son tareas definidas para ejecutarse en intervalos o períodos determinados, generalmente scripts de shell o comandos bash simples.

Los trabajos cron generalmente se usan para registrar ciertos eventos en sus utilidades Syslog o para programar operaciones de respaldo en su host (como respaldos de bases de datos o respaldos de sistemas de archivos).

Para un sistema operativo Linux que ejecuta systemd como administrador de servicios, puede inspeccionar el servicio cron ejecutando el siguiente comando

$ sudo systemctl status cron.service

Nota :necesita privilegios sudo para inspeccionar los servicios del sistema con systemd

¿Cuál es la sintaxis del trabajo cron?

Lo más importante que debe saber sobre cron es probablemente la sintaxis del trabajo cron.

Para definir un trabajo cron, debe definir:

  • Periodicidad :es decir, cuándo se ejecutará su trabajo a lo largo del tiempo. Puedes definirlo para que se ejecute cada primer día del mes, cada 5 minutos o en un día muy específico del año. Se darán ejemplos más adelante en el artículo;
  • Comando :literalmente, el comando que ejecutará la utilidad cron, puede ser un comando de copia de seguridad o cualquier comando que normalmente ejecutaría en un shell;
  • Usuario :esto está reservado para trabajos cron definidos por el sistema en los que desea especificar el usuario que debe ejecutar el comando cron. Para los trabajos cron definidos por el usuario, no tiene que especificar un usuario y su sistema los ejecutará como raíz de forma predeterminada.

Como probablemente notó, la columna de periodicidad está compuesta por 5 columnas.

Cada columna se puede establecer en * , lo que significa que el comando se ejecutará para cada valor individual del intervalo especificado, o para un valor particular, por ejemplo, el sexto mes del año.

Si desea ejecutar un comando para cada minuto, de cada hora, de cada día del mes, de cada mes , debería corregir el siguiente comando

* * * * *  logger "This is a command executed every minute"

Si desea ejecutar un comando cada 30 minutos , escribirías

*/30 * * * * logger "This is executed every 30 minutes"

Por otro lado, si desea ejecutar un comando el primer día del mes a la medianoche , escribirías

0 0 1 * * logger "This is executed on the first day of the month, at midnight"

Al definir esos trabajos cron, no tuve que especificar el usuario que los ejecutaba.

Esto se debe a que existe una diferencia entre los trabajos cron definidos por el usuario y los trabajos cron definidos por el sistema.

Trabajos cron definidos por el usuario

Los trabajos cron definidos por el usuario son trabajos cron definidos por un usuario determinado en el host. No significa que no pueda ejecutar comandos que afecten a todo el sistema, pero sus tareas están aisladas en determinadas carpetas del host.

Cada usuario puede tener su propio conjunto de trabajos cron en un host Linux.

Lista de trabajos cron definidos por el usuario

Cuando esté conectado a un usuario específico, ejecute este comando para ver los trabajos cron propiedad del usuario

$ crontab -l

Si posee trabajos cron, se mostrarán inmediatamente en la salida estándar.

De forma predeterminada, los trabajos cron definidos por el usuario se almacenan en el directorio /var/spool/cron/crontabs, pero deberá ser root para explorarlo.

Agregar trabajos cron definidos por el usuario

Para editar los trabajos cron relacionados con el usuario al que está conectado, ejecute el siguiente comando

$ crontab -e

De forma predeterminada, su host abrirá su editor predeterminado y podrá habilitar sus trabajos cron en el sistema.

Agregue una nueva línea al final del archivo con la siguiente línea, por ejemplo

* * * * * logger "This is a log command from devconnected"

Logger es un comando que permite a los usuarios escribir mensajes personalizados en los registros. Si necesita una guía completa sobre el registro y Syslog, tenemos un artículo completo al respecto.

No es necesario que especifique un usuario, ya que el sistema ya conoce al usuario que define este comando.

Además, el comando se ejecutará como el usuario actual por defecto.

No tiene que reiniciar ningún servicio, su trabajo se tendrá en cuenta la próxima vez que ocurra.

Dado el ejemplo que especificamos anteriormente, inspeccione sus registros para ver su trabajo cron ejecutado

$ sudo journalctl -xfn

Como puede ver, el servicio cron inspeccionó los directorios específicos del usuario en el host (en /var/spool/cron/crontabs ), abrió una sesión como mi usuario actual, ejecutó el comando y cerró la sesión.

¡Impresionante!

Aprendió cómo puede definir trabajos cron definidos por el usuario en su host.

Eliminar trabajos cron definidos por el usuario

Para eliminar trabajos cron definidos por el usuario, use el siguiente comando

$ crontab -r
(or)
$ crontab -ri

Crontab se eliminará para su usuario actual (no eliminará los trabajos cron definidos por el sistema).

Ejecute una lista de trabajos cron para verificar que todos los trabajos cron se hayan eliminado

Trabajos cron definidos por el sistema

Los trabajos cron definidos por el sistema son trabajos definidos en directorios compartidos en el sistema de archivos.

Significa que, dado que tiene privilegios sudo en el host, podrá definir trabajos cron que pueden ser modificados por otros administradores en su sistema.

Los directorios relacionados con los trabajos cron definidos por el sistema se encuentran en el directorio etc. y se pueden ver ejecutando

$ ls -l | grep cron

Como puede ver, esta carpeta contiene muchas carpetas y archivos diferentes:

  • anacrontab :un archivo utilizado por el servicio anacron en Linux, que se explicará en una de las siguientes secciones.
  • cron.d :un directorio que contiene una lista de trabajos cron para ser leídos por el servicio cron. Los archivos en cron.d se escriben con la sintaxis de cron que vimos antes;
  • cron.daily :un directorio que contiene una lista de scripts que el sistema ejecutará todos los días. Los archivos son diferentes de los archivos contenidos en el directorio cron.d porque son scripts bash reales y no trabajos cron escritos con sintaxis cron;
  • cron.horaria, cron.mensual, cron.semanal se explican por sí mismos, contienen scripts que se ejecutan cada hora, cada mes y cada semana del año;
  • crontab :un archivo cron escrito con sintaxis cron que le indica al servicio cron que ejecute trabajos ubicados en las carpetas diaria, por hora, mensual y semanal. También puede definir trabajos personalizados de manera similar a los trabajos cron definidos por el usuario, excepto que debe especificar el usuario que debe ejecutar el comando.

Listado de trabajos cron definidos por el sistema

Como probablemente entendió, los trabajos cron definidos en las carpetas de configuración global se distribuyen en varias carpetas.

Además, se pueden definir múltiples archivos cron en esas carpetas.

Sin embargo, usando la línea de comando, hay una manera eficiente de concatenar todos los archivos en un directorio dado.

Para enumerar todos los trabajos cron definidos en cron.d, ejecute el siguiente comando

$ cat /etc/cron.d/*

De manera similar, para enumerar los trabajos cron definidos en el archivo crontab, ejecute el siguiente comando

$ cat /etc/crontab

Del mismo modo, puede inspeccionar todos los scripts que se van a ejecutar a diario

ls -l /etc/cron.daily/

Agregar trabajos cron definidos por el sistema

Como probablemente entendió, hay varias formas de agregar trabajos cron definidos por el sistema.

Puede crear un archivo cron en cron.d, y el archivo se inspeccionará cada minuto en busca de cambios.

También puede agregar su trabajo cron directamente al archivo crontab. Si desea ejecutar una tarea cada minuto o cada hora, se recomienda agregar su script directamente a los directorios cron correspondientes.

La única diferencia con los trabajos cron definidos por el usuario es que tendrá que especificar un usuario que ejecutará el comando cron.

Por ejemplo, cree un nuevo archivo en el directorio cron.d y agréguele el siguiente contenido (obviamente necesitará privilegios sudo para que se ejecuten los comandos)

$ sudo nano /etc/cron.d/custom-cron

*/1 * * * *    root    logger 'This is a cron from cron.d'

Nuevamente, no es necesario que reinicie ningún servicio, el servicio cron inspeccionará su archivo en la siguiente iteración.

Para ver su trabajo cron en acción, ejecute el siguiente comando

$ sudo journalctl -xfn 100 | grep logger

Esto es lo que deberías ver en tu pantalla

¡Genial!

Como puede ver, el usuario root ahora ejecuta cada minuto su trabajo en su host.

Ahora que tiene una idea completa de lo que son los trabajos cron definidos por el usuario y los trabajos cron definidos por el sistema, veamos el ciclo de vida completo del cron en un host Linux.

Ciclo completo de Cron en Linux

Sin más preámbulos, aquí está el ciclo completo de cron en Linux.

Esto es lo que hace su servicio cron cada minuto, así como todos los directorios inspeccionados.

Cron inspeccionará los trabajos cron definidos por el usuario y ejecútelos si es necesario.

También inspeccionará el crontab archivo donde varios trabajos cron predeterminados están definidos por defecto.

Esos trabajos cron predeterminados son secuencias de comandos que le indican a su host que verifique cada minuto, cada hora, cada día y cada semana carpetas específicas y que ejecute las secuencias de comandos que se encuentran dentro de ellas.

Finalmente, se inspecciona el directorio cron.d . El cron.d puede contener archivos cron personalizados y también contiene un archivo muy importante que es el archivo cron anacron.

Archivo cron de Anacron en Linux

El archivo cron de anacron es un archivo que se ejecuta cada media hora entre las 7:00 am y las 11:00 pm.

El archivo cron de anacron es responsable de llamar al servicio de anacron .

El servicio anacron es un servicio que es responsable de ejecutar trabajos cron en caso de que su computadora no pudiera ejecutarlos en primer lugar.

Suponga que su computadora está apagada pero tiene un trabajo cron responsable de ejecutar los scripts de actualización cada semana.

Como consecuencia, al encender su computadora, en lugar de esperar una semana entera para ejecutar esos scripts de actualización, el servicio anacron detectará que no pudo iniciar el cron de actualización antes.

Anacron luego procederá a ejecutar el trabajo cron para que su sistema se actualice.

De forma predeterminada, se indica al archivo cron de anacron que verifique que los directorios cron.daily, cron.weekly, cron.hourly y cron.monthly se llamaron correctamente en el pasado.

Si anacron detecta que los trabajos cron en la carpeta cron.monthly no se han ejecutado, se encargará de ejecutarlos.

Conclusión

Hoy aprendiste cómo funcionan cron y crontab en Linux.

También tuvo una introducción completa sobre la sintaxis cron y cómo definir sus propios scripts cron como usuario en su host.

Finalmente, tuvo una descripción general completa del ciclo cron de cómo funcionan las cosas en su host y qué es anacron.

Si está interesado en la administración del sistema Linux, tenemos una sección completa al respecto en nuestro sitio web. Haga clic en la imagen de abajo para comprobarlo.


Linux
  1. Cómo usar cron en Linux

  2. Cómo automatizar tareas en Linux usando Crontab

  3. Comandos de Linux:trabajos, bg y fg

  4. Cómo programar trabajos de Cron con Crontab

  5. Linux:Ejecutar trabajo cron en primer plano

Entendiendo Crontab en Linux con ejemplos

Comando crontab de Linux para crear y administrar trabajos cron

Cómo ejecutar y enumerar trabajos cron para un sistema Linux a través de PHP

Linux Crontab:15 impresionantes ejemplos de trabajo de Cron

Cómo programar trabajos con Cron en Linux

10 ejemplos útiles de cron para programar trabajos en Linux