GNU/Linux >> Tutoriales Linux >  >> Debian

Cómo activar comandos en cambios de archivo/directorio con Incron en Debian

Esta guía muestra cómo puede instalar y usar incron en un sistema Debian 9 (Stretch). Incron es similar a cron, pero en lugar de ejecutar comandos basados ​​en el tiempo, puede activar comandos cuando ocurren eventos de archivos o directorios (por ejemplo, una modificación de archivos, cambios de permisos, etc.).

1 Requisitos previos

  • Permisos de administrador del sistema (inicio de sesión raíz). Todos los comandos de este tutorial deben ejecutarse como usuario root en el shell.
  • Usaré el editor "nano" para editar archivos. Puede reemplazar nano con un editor de su elección o instalar nano con "apt-get install nano" si no está instalado en su servidor.

2 Instalando Incron

Incron está disponible en el repositorio de Debian, por lo que instalamos incron con el siguiente comando apt:

apt-get install incron

El proceso de instalación debería ser similar al de esta captura de pantalla.

3 Usando Incron

El uso de incron es muy parecido al uso de cron. Tiene el comando incrontab que le permite enumerar (-l), editar (-e) y eliminar (-r) las entradas de incrontab.

Para obtener más información al respecto, consulte:

hombre incrontab

Allí también encontrará la siguiente sección:

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 raíz, debemos eliminar /etc/incron.allow (que no es seguro porque todos los usuarios del sistema pueden usar incrontab)...

rm -f /etc/incron.allow

... o agregue la raíz a ese archivo (recomendado). Abra el archivo /etc/incron.allow con nano:

nano /etc/incron.allow

Y añade la siguiente línea. Luego guarde el archivo.

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

Después funciona:

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

Podemos usar el comando:

incrontab -e

Para crear trabajos incron. Antes de hacer esto, echamos un vistazo a la página man de incron:

hombre 5 incrontab

La página del manual explica el formato de los crontabs. Básicamente, el formato es el siguiente...

  

...donde puede ser un directorio (es decir, el directorio y/o los archivos directamente en ese directorio (¡no los archivos en subdirectorios de ese directorio!) que se observan) o un archivo.

puede ser una de las siguientes:

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. Abra el incron incrontab:

incrontab -e

y agregue la siguiente línea:

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

Luego, crea o modifica un archivo en el directorio /tmp y observa /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 comando real. se ejecutó (es decir, los comodines se reemplazan con sus valores reales).

cola /var/log/syslog
...
10 de enero 13:52:35 server1 incrond[1012]:(raíz) CMD (echo "$ /tmp .hello.txt.swp IN_MODIFY 2")
10 de enero 13 :52:36 server1 incrond[1012]:(raíz) CMD (echo "$ /tmp .hello.txt.swp IN_MODIFY 2")
10 de enero 13:52:39 server1 incrond[1012]:(raíz) CMD (echo "$ /tmp hello.txt IN_MODIFY 2")
10 de enero 13:52:39 servidor1 incrond[1012]:(raíz) CMD (echo "$ /tmp .hello.txt.swp IN_MODIFY 2" )

En este ejemplo he editado el archivo /tmp/hello.txt; como puede ver, [email protected] se traduce a /tmp, $# a hello.txt , $% a IN_CREATE y $&a 256. Utilicé un editor que creó un archivo .txt.swp temporal que genera líneas adicionales en syslog.

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 dentro de 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

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

  • Debian http://www.debian.org
  • Software Incron:http://inotify.aiken.cz/?section=incron&page=about&lang=en

Debian
  1. Cómo cifrar el directorio con EncFS en Debian 9 Stretch Linux

  2. Cómo configurar un sitio web para compartir archivos con Jirafeau en Debian 10

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

  4. Cómo cambiar los permisos de archivos y directorios con el Administrador de archivos

  5. ¿Cómo agrupar los comandos en un archivo preconfigurado de Debian?

Cómo leer un archivo con espacios en Linux

Cómo encontrar archivos en Debian 10

Cómo manipular archivos en Debian 11

Cómo editar el archivo Hosts en Debian

Cómo reparar errores del sistema de archivos en Debian

Cómo iniciar el archivo ISO de Debian desde el disco duro con GRUB2