Dateien und Verzeichnisse überwachen mit incron
Kategorie: Allgemein
Der Dienst incron funktioniert nach einem ähnlichen Prinzip wie der cron-Daemon, allerdings kann man incron dazu verwenden, Dateien oder Verzeichnisse zu überwachen und bei bestimmten Ereignissen eine Aktion auszuführen.
Ein praktisches Beispiel:
Man möchte, dass der Webserver automatisch neu gestartet wird, sobald sich eine der Konfigurationsdateien in /etc/apache2/ ändert.
Zunächst zur Installation:
Auf Debian oder Ubuntu erledigt man die Installation ganz einfach mit:
apt-get install incron
Auf Fedora, CentOS oder RedHat:
yum install incron
(jeweils als root)
Berechtigungen:
Standardmäßig darf bei einer Debian-Installation kein Benutzer incron benutzen. Die Berechtigungen werden über die beiden Dateien
/etc/incron.allow
/etc/incron.deny
gesteuert.
Ähnlich wie bei cron (crontab) gibt es hier den Befehl incrontab.
incrontab -l listet die aktuellen Einträge auf
incrontab -e ermöglicht das Bearbeiten der Einträge
Steht der Benutzer, der den Befehl ausführt nicht in der Datei /etc/incron.allow, führen diese zu einer Fehlermeldung.
Möchte man z.B. dass der Benutzer root incron benutzen darf, trägt man einfach nur den Benutzernamen in die Datei /etc/incron.allow ein.
Incrontab aktualisieren:
Mit incrontab -e kann man jetzt die entspr. Dateien/Verzeichnisse und die dazughörigen Events und Aktionen eintragen.
Ich nehme hier das praktische Bsp. (siehe oben):
/etc/apache2/ IN_CLOSE_WRITE /etc/init.d/apache2 reload
Es können Verzeichnisse und Dateien gleichermaßen eingetragen werden.
Die Einträge sind immer in der Form: Datei/Verzeichnis Event Befehl
D.h. in diesem Bsp. wird der Webserver neu gestartet, sobald eine Datei im Verzeichnis /etc/apache2/ gespeichert wird.
Die Events:
| IN_ACCESS | Wenn die datei gelesen wird |
| IN_ATTRIB | Wenn Berechtigungen oder andere Attribute der Datei geändert werden |
| IN_CLOSE_WRITE | Wenn die Datei zum Schreiben geöffnet war und geschlossen wird |
| IN_CLOSE_NOWRITE | Wenn die Datei zum Lesen geöffnet war und geschlossen wird |
| IN_CREATE | Wenn eine Datei im beobachteten Verzeichnis erstellt wird |
| IN_DELETE | Wenn eine Datei im beobachteten Verzeichnis gelöscht wird |
| IN_DELETE_SELF | Wenn das beobachtete Verzeichnis bzw. die Datei selbst gelöscht wird |
| IN_MODIFY | Wenn die Datei oder das Verzeichnis modfiziert wird |
| IN_MOVE_SELF | Wenn das beobachtete Verzeichnis bzw. die Datei verschoben wird |
|
IN_MOVED_FROM
|
Wenn ein Verzeichnis bzw. eine Datei aus dem beobachteten Verzeichnis verschoben wird |
| IN_MOVED_TO | Wenn ein Verzeichnis bzw. eine Datei in das beobachtete Verzeichnis verschoben wird |
| IN_OPEN | Wenn eine Datei geöffnet wird |
Test:
Um das ganze zu testen, speichert man den Cron-Tab ab und beendet den Editor (i.d.R. vi oder nano).
Sobald man jetzt eine Datei in diesem Verzeichnis speichert sollte in /var/log/syslog bzw. in /var/log/messages je nach System ein Eintrag wie dieser zu finden sein:
Mar 29 12:34:39 h1643630 incrond[21786]: (root) CMD (/etc/init.d/apache2 reload)