Diese Anleitung zeigt, wie Sie incron auf einem Debian Etch-System installieren und verwenden können. Incron ist ähnlich wie cron, aber anstatt Befehle basierend auf der Zeit auszuführen, kann es Befehle auslösen, wenn Datei- oder Verzeichnisereignisse auftreten (z. B. eine Dateiänderung, Änderungen der Berechtigungen usw.).
Dieses Dokument kommt ohne jegliche Gewährleistung! Ich gebe keine Garantie, dass dies für Sie funktioniert!
1 Installation von Incron
Incron ist im etch-backports-Repository verfügbar, daher müssen wir die folgende Zeile zu /etc/apt/sources.list hinzufügen:
| [...] deb http://www.backports.org/debian etch-backports main contrib non-free [...] |
Lassen Sie uns den backports.org-Archivschlüssel in apt importieren…
wget -O - http://backports.org/debian/archive.key | apt-key add -
… und führen Sie aus
Das etch-backports-Repository ist standardmäßig inaktiv, daher müssen wir den folgenden Befehl verwenden, um incron daraus zu installieren:
apt-get -t etch-backports install incron
2 Verwendung von Incron
Die Verwendung von Incron ist sehr ähnlich wie die Verwendung von cron. Sie haben den incrontab-Befehl, mit dem Sie incrontab-Einträge auflisten ( -l), bearbeiten ( -e) und entfernen ( -r) können. Um mehr darüber zu erfahren, siehe
Dort finden Sie auch den folgenden Abschnitt:
Wenn /etc/incron.allow existiert, dürfen nur die hier aufgeführten Benutzer incron verwenden. Andernfalls, wenn /etc/incron.deny existiert, dürfen nur die hier NICHT aufgeführten Benutzer incron verwenden. Wenn keine dieser Dateien existiert, ist jeder berechtigt, incron zu verwenden. (Wichtiger Hinweis: Dieses Verhalten ist unsicher und wird wahrscheinlich geändert, um mit dem von ISC Cron verwendeten Stil kompatibel zu sein.) Der Speicherort dieser Dateien kann in der Konfiguration geändert werden.
Das bedeutet, wenn wir incrontab als root verwenden möchten, müssen wir entweder /etc/incron.allow löschen (was unsicher ist, da dann jeder Systembenutzer incrontab verwenden kann)…
… oder root zu dieser Datei hinzufügen (empfohlen):
| 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:~#
Danach funktioniert es:
server1:~# incrontab -l
no table for root
server1:~#
Wir können verwenden
um incron-Jobs zu erstellen. Bevor wir dies tun, werfen wir einen Blick auf
weil es das Format der crontabs erklärt. Grundsätzlich ist das Format wie folgt…
… wobei ein Verzeichnis sein kann (was bedeutet, dass das Verzeichnis und/oder die Dateien direkt in diesem Verzeichnis (nicht Dateien in Unterverzeichnissen dieses Verzeichnisses!) überwacht werden) oder eine Datei.
kann eines der folgenden sein:
```
IN_ACCESS Datei wurde zugegriffen (gelesen) (*)
IN_ATTRIB Metadaten geändert (Berechtigungen, Zeitstempel, erweiterte Attribute usw.) (*)
IN_CLOSE_WRITE Datei, die zum Schreiben geöffnet wurde, wurde geschlossen (*)
IN_CLOSE_NOWRITE Datei, die nicht zum Schreiben geöffnet wurde, wurde geschlossen (*)
IN_CREATE Datei/Verzeichnis wurde im überwachten Verzeichnis erstellt (*)
IN_DELETE Datei/Verzeichnis wurde aus dem überwachten Verzeichnis gelöscht (*)
IN_DELETE_SELF Überwachtes Datei/Verzeichnis wurde selbst gelöscht
IN_MODIFY Datei wurde geändert (*)
IN_MOVE_SELF Überwachtes Datei/Verzeichnis wurde selbst verschoben
IN_MOVED_FROM Datei wurde aus dem überwachten Verzeichnis verschoben (*)
IN_MOVED_TO Datei wurde in das überwachte Verzeichnis verschoben (*)
IN_OPEN Datei wurde geöffnet (*))
```
Beim Überwachen eines Verzeichnisses können die oben mit einem Sternchen (*) gekennzeichneten Ereignisse für Dateien im Verzeichnis auftreten, wobei das Namensfeld in den zurückgegebenen Ereignisdaten den Namen der Datei innerhalb des Verzeichnisses identifiziert.
Das Symbol IN_ALL_EVENTS ist als Bitmaske aller oben genannten Ereignisse definiert. Zwei zusätzliche Komfortsymbole 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.
Die folgenden weiteren Symbole können in der Maske angegeben werden:
```
IN_DONT_FOLLOW Verfolgen Sie den Pfadnamen nicht, wenn es sich um einen symbolischen Link handelt
IN_ONESHOT Überwachen Sie den Pfadnamen nur für ein Ereignis
IN_ONLYDIR Nur den Pfadnamen überwachen, wenn es sich um ein Verzeichnis handelt
```
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 vollständig bearbeitet ist (bis der zugehörige Kindprozess beendet ist).
ist der Befehl, der ausgeführt werden soll, wenn das Ereignis auftritt. Die folgenden Platzhalter können innerhalb der Befehlspezifikation verwendet werden:
```
$$ Dollarzeichen
$@ überwachte Dateisystempfad (siehe oben)
$# ereignisbezogener Dateiname
$% Ereignisflags (textuell)
$& Ereignisflags (numerisch)
```
Wenn Sie ein Verzeichnis überwachen, dann enthält $@ den Verzeichnispfad und $# die Datei, die das Ereignis ausgelöst hat. Wenn Sie eine Datei überwachen, dann enthält $@ den vollständigen Pfad zur Datei und $# ist leer.
Wenn Sie die Platzhalter benötigen, aber nicht sicher sind, was sie bedeuten, können Sie einen incron-Job wie folgt erstellen:
| ```
/tmp/ IN_MODIFY echo "$ $@ $# $% $&"
``` |
Dann erstellen oder ändern Sie eine Datei im /tmp-Verzeichnis und schauen Sie sich /var/log/syslog an - dieses Protokoll zeigt, wann ein incron-Job ausgelöst wurde, ob er erfolgreich war oder ob es Fehler gab, und was der tatsächliche Befehl war, den er ausgeführt hat (d. h. die Platzhalter werden durch ihre tatsächlichen Werte ersetzt).
```
tail /var/log/syslog
```
```
...
Aug 21 17:26:50 server1 incrond[7111]: (root) CMD (echo "$ /tmp huhu IN_CREATE 256")
```
In diesem Beispiel habe ich die Datei /tmp/huhu erstellt; wie Sie sehen, wird $@ zu /tmp, $# zu huhu, $% zu IN_CREATE und $& zu 256.
Jetzt 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 wann immer es Änderungen gibt, möchte ich, dass incron Apache neu startet. So machen wir es:
```
incrontab -e
```
| ```
/etc/apache2/apache2.conf IN_MODIFY /etc/init.d/apache2 restart
/etc/apache2/vhosts/ IN_MODIFY /etc/init.d/apache2 restart
``` |
Das war's. Zu Testzwecken können Sie Ihre Apache-Konfiguration ändern und sich /var/log/syslog ansehen, und Sie sollten sehen, dass incron Apache neu startet.
Um alle definierten incron-Jobs aufzulisten, können Sie ausführen
```
incrontab -l
```
```
server1:~# incrontab -l
/etc/apache2/apache2.conf IN_MODIFY /etc/init.d/apache2 restart
/etc/apache2/vhosts/ IN_MODIFY /etc/init.d/apache2 restart
server1:~#
```
Um alle incron-Jobs des aktuellen Benutzers zu löschen, führen Sie aus
```
incrontab -r
```
```
server1:~# incrontab -r
removing table for user 'root'
table for user 'root' successfully removed
server1:~#
```
### 3 Links
- incron: http://inotify.aiken.cz/?section=incron&page=about&lang=en