GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

So führen Sie Befehle für Datei- oder Verzeichnisänderungen mit Incron unter Ubuntu aus

Diese Anleitung zeigt Ihnen, wie Sie Incron auf einem Ubuntu-System verwenden können, um Befehle auszuführen, wenn eine Datei oder ein Verzeichnis geändert wird. Der Incron-Daemon ähnelt Cron, aber anstatt Befehle basierend auf der Zeit auszuführen, kann er Befehle auslösen, wenn ein Datei- oder Verzeichnisereignis eintritt (z. B. eine Dateiänderung, Änderungen von Berechtigungen usw.).

1 Incron installieren

Die folgenden Schritte müssen als Root-Benutzer ausgeführt werden. Bitte loggen Sie sich in die Shell Ihres Ubuntu-Systems ein und werden Sie root mit:

sudo su

Die Incron-Software ist im Ubuntu-Repository verfügbar. Daher werde ich es mit apt wie folgt installieren:

apt-get install incron

3 Verwendung von Incron

Wie im ersten Kapitel erwähnt, hat Incron viele Ähnlichkeiten mit dem Cron-Tool. Wo Cron seinen crontab-Befehl zum Verwalten von Cronjobs hat, hat Incron den Befehl incrontab. Sie können den incrontab-Befehl Optionsliste (-l), bearbeiten (-e) und entfernen (-r) verwenden, um incrontab-Einträge anzuzeigen und zu ändern.

Führen Sie den folgenden Befehl aus, um einen vollständigen Überblick über incrontab zu erhalten:

man incrontab

In der Manpage finden Sie den folgenden Hinweis:

Falls /etc/incron.allow existiert, dürfen nur hier aufgeführte Benutzer incron verwenden. Andernfalls, wenn /etc/incron.deny existiert, können nur Benutzer, die hier NICHT aufgeführt sind, incron verwenden. Wenn keine dieser Dateien existiert, darf jeder Incron verwenden. (Wichtiger Hinweis:Dieses Verhalten ist unsicher und wird wahrscheinlich geändert, damit es mit dem von ISC Cron verwendeten Stil kompatibel ist.) Der Speicherort dieser Dateien kann in der Konfiguration geändert werden.

Das heißt, wenn wir incrontab als root verwenden wollen, müssen wir /etc/incron.allow löschen (was unsicher ist)...

rm -f /etc/incron.allow

... oder wir fügen den root-Benutzer zur Datei incron.allow hinzu (was die empfohlene Option ist). Öffnen Sie die Datei /etc/incron.allow:

nano /etc/incron.allow

Und fügen Sie die folgende Zeile hinzu.

root

Bevor Sie dies tun, erhalten Sie Fehlermeldungen wie diese, wenn Sie versuchen, incrontab zu verwenden:

server1:~# incrontab -l
user 'root' is not allowed to use incron
server1:~#
nicht verwenden

Danach funktioniert es:

server1:~# incrontab -l
no table for root
server1:~#

Wir können jetzt diesen Befehl verwenden:

incrontab -e

Incron-Jobs erstellen. Sehen wir uns nun die Manpage genauer an, um die Syntax zu verstehen.

man 5 incrontab

Die Manpage zeigt das Format der Cron-Tab-Zeilen. Das Format folgt diesem Schema:

<path> <mask> <command>

...wobei ein Verzeichnis oder eine Datei ist. Bitte beachten Sie, dass Incron keine Dateien in Unterverzeichnissen des von Ihnen festgelegten Verzeichnisses überwachen kann, sodass nur Dateien in diesem Verzeichnis überwacht werden.

kann eine der folgenden Optionen sein:

IN_ACCESS           File was accessed (read) (*)
IN_ATTRIB           Metadata changed (permissions, timestamps, extended attributes, etc.) (*)
IN_CLOSE_WRITE      File opened for writing was closed (*)
IN_CLOSE_NOWRITE    File not opened for writing was closed (*)
IN_CREATE           File/directory created in watched directory (*)
IN_DELETE           File/directory deleted from watched directory (*)
IN_DELETE_SELF           Watched file/directory was itself deleted
IN_MODIFY           File was modified (*)
IN_MOVE_SELF        Watched file/directory was itself moved
IN_MOVED_FROM       File moved out of watched directory (*)
IN_MOVED_TO         File moved into watched directory (*)
IN_OPEN             File was opened (*)

Bei der Überwachung eines Verzeichnisses können die oben mit einem Sternchen (*) gekennzeichneten Ereignisse für Dateien im Verzeichnis auftreten. In diesem Fall identifiziert das Namensfeld in den
zurückgegebenen Ereignisdaten den Namen der Datei innerhalb des Verzeichnisses.

Das IN_ALL_EVENTS-Symbol ist als eine Bitmaske aller obigen Ereignisse definiert. Zwei zusätzliche praktische Symbole sind IN_MOVE, das eine Kombination aus IN_MOVED_FROM und IN_MOVED_TO ist, und IN_CLOSE, das IN_CLOSE_WRITE und IN_CLOSE_NOWRITE kombiniert.

Folgende weitere Symbole können in der Maske angegeben werden:

IN_DONT_FOLLOW      Don't dereference pathname if it is a symbolic link
IN_ONESHOT          Monitor pathname for only one event
IN_ONLYDIR          Only watch pathname if it is a directory

Zusätzlich gibt es ein Symbol, das nicht im Inotify-Symbolsatz erscheint. Es ist IN_NO_LOOP. Dieses Symbol deaktiviert die Überwachung von Ereignissen, bis das aktuelle Ereignis vollständig verarbeitet ist (bis sein untergeordneter Prozess beendet wird).

ist der Befehl, der ausgeführt werden soll, wenn das Ereignis eintritt. Die folgenden Wildards können innerhalb der Befehlsspezifikation verwendet werden:

$$   dollar sign
[email protected]   watched filesystem path (see above)
$#   event-related file name
$%   event flags (textually)
$&   event flags (numerically)

Wenn Sie ein Verzeichnis beobachten, enthält [email protected] den Verzeichnispfad und $# die Datei, die das Ereignis ausgelöst hat. Wenn Sie sich eine Datei ansehen, enthält [email protected] den vollständigen Pfad zur Datei und $# ist leer.

Wenn Sie die Platzhalter benötigen, sich aber nicht sicher sind, was sie bedeuten, können Sie einen Incron-Job wie diesen erstellen.

Erstellen Sie ein Verzeichnis, das überwacht werden soll:

mkdir /tmp/testdir

Öffnen Sie dann den Incrontab:

incrontab -e

und fügen Sie die folgende Zeile hinzu:

/tmp/testdir/ IN_MODIFY echo "$$ [email protected] $# $% $&"

Dann erstellen oder ändern Sie eine Datei im /tmp/testdir/-Verzeichnis und werfen einen Blick auf /var/log/syslog - dieses Protokoll zeigt, wann ein Incron-Job ausgelöst wurde, ob er erfolgreich war oder ob es Fehler gab und was der aktuelle ist Befehl war, dass er ausgeführt wurde (d. h. die Wildcards werden durch ihre echten Werte ersetzt).

Zu Testzwecken füge ich zwei Dateien hinzu, helloworld.txt und helloworld2.txt in /tmp/testdir/ mit dem echo-Befehl:

echo 'How are you?' > /tmp/testdir/helloworld.txt
echo 'How are you?' > /tmp/testdir/helloworld2.txt

Überprüfen wir also das Syslog mit Tail auf Fehler:

tail /var/log/syslog
...
Apr 12 18:49:22 server1 incrond[6441]: (root) CMD (echo "$ /tmp/testdir/ helloworld.txt IN_MODIFY 2")
Apr 12 18:50:31 server1 incrond[6441]: (root) CMD (echo "$ /tmp/testdir/ helloworld2.txt IN_MODIFY 2")

Nun genug Theorie. Lassen Sie uns unsere ersten Incron-Jobs erstellen. Ich möchte die Datei /etc/apache2/apache2.conf und das Verzeichnis /etc/apache2/vhosts/ überwachen und bei Änderungen möchte ich, dass incron Apache neu startet. So machen wir es:

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

Das ist es. Zu Testzwecken können Sie Ihre Apache-Konfiguration ändern und einen Blick auf /var/log/syslog werfen, und Sie sollten sehen, dass Incron Apache neu startet.

HINWEIS :Führen Sie keine Aktionen innerhalb eines Incron-Jobs in einem Verzeichnis aus, das Sie überwachen, um Schleifen zu vermeiden. Beispiel: Wenn Sie das Verzeichnis /tmp auf Änderungen überwachen und jede Änderung ein Skript auslöst, das eine Protokolldatei in /tmp schreibt, führt dies zu einer Schleife und kann Ihr System überlasten oder sogar zum Absturz bringen.

Um alle definierten Incron-Jobs aufzulisten, können Sie Folgendes ausführen:

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

Um alle Incron-Jobs des aktuellen Benutzers zu löschen, führen Sie Folgendes aus:

incrontab -r
server1:~# incrontab -r
removing table for user 'root'
table for user 'root' successfully removed
server1:~#

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

Ubuntu
  1. Auslösen von Befehlen bei Datei-/Verzeichnisänderungen mit Incron auf Debian Etch

  2. So führen Sie das Hadoop MapReduce-Programm unter Ubuntu 16.04 aus

  3. So installieren Sie die Deb-Datei in Ubuntu (mit Beispielen)

  4. Wie ändere ich das Arbeitsverzeichnis, wenn ich eine Datei mit einem Doppelklick auf dem Ubuntu-Desktop öffne?

  5. Wie führe ich ein Shell-Skript aus, wenn sich eine Datei oder ein Verzeichnis ändert?

So löschen Sie ein Verzeichnis in Ubuntu 20.04

So löschen Sie eine Datei in Ubuntu

So konfigurieren Sie das Netzwerk mit Netplan unter Ubuntu

So führen Sie .bin- und .run-Dateien in Ubuntu aus

So flashen/brennen Sie ein Betriebssystem-Image mit Etcher unter Ubuntu

So entfernen Sie Datei-Exif-Daten mit ExifTool in Ubuntu 20.04