Diese Anleitung zeigt, wie Sie incron installieren und verwenden auf einem Debian 9 (Stretch) System. Incron ist Cron ähnlich, aber anstatt Befehle basierend auf Zeit auszuführen, kann es Befehle auslösen, wenn Datei- oder Verzeichnisereignisse eintreten (z. B. eine Dateiänderung, Änderungen von Berechtigungen usw.).
1 Voraussetzungen
- Systemadministratorberechtigungen (Root-Login). Alle Befehle in diesem Tutorial sollten als Root-Benutzer auf der Shell ausgeführt werden.
- Ich werde den Editor "nano" verwenden, um Dateien zu bearbeiten. Sie können nano durch einen Editor Ihrer Wahl ersetzen oder nano mit "apt-get install nano" installieren, wenn es nicht auf Ihrem Server installiert ist.
2 Incron installieren
Incron ist im Debian-Repository verfügbar, also installieren wir Incron mit dem folgenden apt-Befehl:
apt-get install incron
Der Installationsvorgang sollte dem in diesem Screenshot ähneln.
3 Incron verwenden
Die Verwendung von Incron ist der Verwendung von Cron sehr ähnlich. Sie haben den Befehl incrontab, mit dem Sie incrontab-Einträge auflisten (-l), bearbeiten (-e) und entfernen (-r) können.
Um mehr darüber zu erfahren, siehe:
man incrontab
Dort finden Sie auch den folgenden Abschnitt:
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 entweder /etc/incron.allow löschen (was unsicher ist, weil dann jeder Systembenutzer incrontab verwenden kann)...
rm -f /etc/incron.allow
... oder root zu dieser Datei hinzufügen (empfohlen). Öffnen Sie die Datei /etc/incron.allow mit nano:
nano /etc/incron.allow
Und fügen Sie die folgende Zeile hinzu. Speichern Sie dann die Datei.
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
Danach funktioniert es:
server1:~# incrontab -l
no table for root
Wir können den Befehl verwenden:
incrontab -e
Incron-Jobs erstellen. Bevor wir dies tun, werfen wir einen Blick auf die Incron-Manpage:
man 5 incrontab
Die Manpage erklärt das Format der Crontabs. Grundsätzlich ist das Format wie folgt...
<path> <mask> <command>
...wobei
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).
$$ 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. Öffnen Sie das Incron-Incrontab:
incrontab -e
und fügen Sie die folgende Zeile hinzu:
/tmp/ IN_MODIFY echo "$$ [email protected] $# $% $&"
Dann erstellen oder ändern Sie eine Datei im /tmp-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 eigentliche Befehl war es ausgeführt (d. h. die Wildcards werden durch ihre echten Werte ersetzt).
tail /var/log/syslog
...
Jan 10 13:52:35 server1 incrond[1012]: (root) CMD (echo "$ /tmp .hello.txt.swp IN_MODIFY 2")
Jan 10 13:52:36 server1 incrond[1012]: (root) CMD (echo "$ /tmp .hello.txt.swp IN_MODIFY 2")
Jan 10 13:52:39 server1 incrond[1012]: (root) CMD (echo "$ /tmp hello.txt IN_MODIFY 2")
Jan 10 13:52:39 server1 incrond[1012]: (root) CMD (echo "$ /tmp .hello.txt.swp IN_MODIFY 2")
In diesem Beispiel habe ich die Datei /tmp/hello.txt bearbeitet; wie Sie sehen, wird [email protected] in /tmp übersetzt, $# in hello.txt , $% an IN_CREATE und $&an 256. Ich habe einen Editor verwendet, der eine temporäre .txt.swp-Datei erstellt hat, die zu den zusätzlichen Zeilen im Syslog führt.
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
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
4 Links
- Debian http://www.debian.org
- Incron-Software:http://inotify.aiken.cz/?section=incron&page=about&lang=en