GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Cómo ejecutar comandos en cambios de archivos o directorios con Incron en Ubuntu

Este tutorial le muestra cómo puede usar incron en un sistema Ubuntu para ejecutar comandos cuando se cambia un archivo o directorio. El demonio incron es similar a cron, pero en lugar de ejecutar comandos basados ​​en el tiempo, puede activar comandos cuando ocurre un evento de archivo o directorio (por ejemplo, una modificación de archivo, cambios de permisos, etc.).

1 Instalando Incron

Los siguientes pasos deben ejecutarse como usuario root. Inicie sesión en el shell de su sistema Ubuntu y conviértase en root con:

sudo su

El software Incron está disponible en el repositorio de Ubuntu. Por lo tanto, lo instalaré con apt así:

apt-get install incron

3 Cómo usar Incron

Como se mencionó en el primer capítulo, Incron tiene muchas similitudes con la herramienta Cron. Donde Cron tiene su comando crontab para administrar cronjobs, Incron tiene el comando incrontab. Puede usar la lista de opciones del comando incrontab (-l), editar (-e) y eliminar (-r) para mostrar y modificar las entradas de incrontab.

Ejecute el siguiente comando para obtener una descripción completa de incrontab:

hombre incrontab

En la página del manual encontrará la siguiente nota:

Si /etc/incron.allow existe, solo los usuarios enumerados aquí pueden usar incron. De lo contrario, si /etc/incron.deny existe, solo los usuarios que NO aparecen aquí pueden usar incron. Si ninguno de estos archivos existe, todos pueden usar incron. (Nota importante:este comportamiento es inseguro y probablemente se cambiará para que sea compatible con el estilo utilizado por ISC Cron). La ubicación de estos archivos se puede cambiar en la configuración.

Esto significa que si queremos usar incrontab como root, debemos eliminar /etc/incron.allow (que no es seguro)...

rm -f /etc/incron.allow

... o añadimos el usuario root al archivo incron.allow (que es la opción recomendada). Abra el archivo /etc/incron.allow:

nano /etc/incron.allow

Y agregue la siguiente línea.

raíz

Antes de hacer esto, recibirá mensajes de error como este cuando intente usar incrontab:

servidor1:~# incrontab -l
el usuario 'raíz' no puede usar incron
servidor1:~#

Después funciona:

servidor1:~# incrontab -l
no hay tabla para root
servidor1:~#

Ahora podemos usar este comando:

incrontab -e

Para crear trabajos incron. Ahora echemos un vistazo más profundo a la página del manual para comprender la sintaxis.

hombre 5 incrontab

La página de manual muestra el formato de las líneas de tabulación cron. El formato sigue este esquema:

  

...donde  es un directorio o un archivo. Tenga en cuenta que incron no puede ver archivos en subdirectorios del directorio que ha configurado, por lo que solo se verán los archivos en ese directorio.

puede ser una de las siguientes opciones:

IN_ACCESS           Se accedió al archivo (leer) (*)
IN_ATTRIB           Metadatos cambiados (permisos, marcas de tiempo, atributos extendidos, etc.) (*)
IN_CLOSE_WRITE      El archivo abierto para escribir se cerró (*)
IN_CLOSE_NOWRITE    El archivo no abierto para escribir se cerró (*)
IN_CREATE           Archivo/directorio creado en el directorio observado (*)
IN_DELETE           Archivo/directorio eliminado del directorio observado (*)
IN  DELETE archivo observado /directorio se eliminó
IN_MODIFY           El archivo se modificó (*)
IN_MOVE_SELF        El archivo/directorio observado se movió
IN_MOVED_FROM       El archivo se movió fuera del directorio observado (*)IN_OPEN             El archivo se abrió (*)

Al monitorear un directorio, los eventos marcados con un asterisco (*) arriba pueden ocurrir para archivos en el directorio, en cuyo caso el campo de nombre en los
datos de eventos devueltos identifica el nombre del archivo dentro del directorio.

El símbolo IN_ALL_EVENTS se define como una máscara de bits de todos los eventos anteriores. Dos símbolos de conveniencia adicionales son IN_MOVE, que es una combinación de IN_MOVED_FROM e IN_MOVED_TO, e IN_CLOSE, que combina IN_CLOSE_WRITE e IN_CLOSE_NOWRITE.

Los siguientes símbolos adicionales se pueden especificar en la máscara:

IN_DONT_FOLLOW      No desreferenciar pathname si es un enlace simbólico
IN_ONESHOT          Monitor pathname solo para un evento
IN_ONLYDIR          Solo ver pathname si es un directorio

Además, hay un símbolo que no aparece en el conjunto de símbolos de inotify. Es IN_NO_LOOP. Este símbolo deshabilita los eventos de monitoreo hasta que el actual se maneje por completo (hasta que salga su proceso secundario).

es el comando que debe ejecutarse cuando ocurre el evento. Los siguientes comodines pueden usarse dentro de la especificación del comando:

&indicadores de eventos (numéricamente)

Si observa un directorio, [email protected] contiene la ruta del directorio y $# el archivo que desencadenó el evento. Si ve un archivo, [email protected] contiene la ruta completa al archivo y $# está vacío.

Si necesita los comodines pero no está seguro de a qué se traducen, puede crear un trabajo incron como este.

Cree un directorio que será vigilado:

mkdir /tmp/testdir

Luego abre el incrontab:

incrontab -e

y agregue la siguiente línea:

/tmp/testdir/ IN_MODIFY echo "$$ [correo electrónico protegido] $# $% $&"

Luego crea o modifica un archivo en el directorio /tmp/testdir/ y echa un vistazo a /var/log/syslog:este registro muestra cuándo se activó un trabajo incron, si tuvo éxito o si hubo errores, y cuál fue el resultado real. comando fue que se ejecutó (es decir, los comodines se reemplazan con sus valores reales).

Para fines de prueba, agregaré dos archivos, helloworld.txt y holamundo2.txt en /tmp/testdir/ con el comando de eco:

echo '¿Cómo estás?'> /tmp/testdir/helloworld.txt
echo '¿Cómo estás?'> /tmp/testdir/holamundo2.txt

Entonces, revisemos el syslog con la cola para ver si hay incidentes incrónicos:

cola /var/log/syslog
...
12 de abril 18:49:22 server1 incrond[6441]:(raíz) CMD (echo "$ /tmp/testdir/ helloworld.txt IN_MODIFY 2")
12 de abril de 18 :50:31 server1 incrond[6441]:(raíz) CMD (echo "$ /tmp/testdir/ helloworld2.txt IN_MODIFY 2")

Ahora basta de teoría. Creemos nuestros primeros trabajos incron. Me gustaría monitorear el archivo /etc/apache2/apache2.conf y el directorio /etc/apache2/vhosts/, y siempre que haya cambios, quiero que Incron reinicie Apache. Así es como lo hacemos:

incrontab -e
/etc/apache2/apache2.conf IN_MODIFY /usr/sbin/service apache2 restart/etc/apache2/sites-disponible/ IN_MODIFY /usr/sbin/service apache2 restart

Eso es todo. Para fines de prueba, puede modificar su configuración de Apache y echar un vistazo a /var/log/syslog, y debería ver que incron reinicia Apache.

NOTA :no realice ninguna acción desde un trabajo incron en un directorio que supervisa para evitar bucles. Ejemplo: Cuando supervisa el directorio /tmp en busca de cambios y cada cambio activa una secuencia de comandos que escribe un archivo de registro en /tmp, esto provocará un bucle y podría hacer que su sistema tenga una carga alta o incluso que se bloquee.

Para enumerar todos los trabajos incron definidos, puede ejecutar:

incrontab -l
servidor1:~# incrontab -l
/etc/apache2/apache2.conf IN_MODIFY /usr/sbin/service apache2 restart
/etc/apache2/vhosts/ IN_MODIFY /usr/sbin/service apache2 reiniciar
servidor1:~#

Para eliminar todos los trabajos incron del usuario actual, ejecute:

incrontab -r
servidor1:~# incrontab -r
eliminando la tabla para el usuario 'raíz'
la tabla para el usuario 'raíz' se eliminó con éxito
servidor1:~#

  • incron:http://inotify.aiken.cz/?section=incron&page=about&lang=en

Ubuntu
  1. Activación de comandos en cambios de archivo/directorio con Incron en Debian Etch

  2. Cómo ejecutar el programa Hadoop MapReduce en Ubuntu 16.04

  3. Cómo instalar el archivo deb en Ubuntu (con ejemplos)

  4. ¿Cómo cambiar el directorio de trabajo al abrir un archivo con doble clic en el escritorio de Ubuntu?

  5. ¿Cómo ejecutar un script de shell cuando cambia un archivo o directorio?

Cómo eliminar un directorio en Ubuntu 20.04

Cómo eliminar un archivo en Ubuntu

Cómo configurar la red con Netplan en Ubuntu

Cómo ejecutar archivos .bin y .run en Ubuntu

Cómo flashear/grabar una imagen del sistema operativo con Etcher en Ubuntu

Cómo eliminar datos de archivo Exif con ExifTool en Ubuntu 20.04