Iwatch
iWatch ist ein Programm zur Dateisystemüberwachung in Echtzeit mit inotify. Es berichtet per E-Mail od. nach Syslog und kann Kommandos ausführen.
iWatch kann auf zwei Arten betrieben werden. Als Daemon sowie auch auf der Kommandozeile, wobei jedoch die Optionen beider Betriebsarten nicht gemischt werden können.
Kommandozeilen-Modus
Im Kommandozeilen-Modus kennt iWatch folgende Optionen:
iwatch [-c command] [-e event[,event[,..]]] [-m <email address>] [-r] [-t <filter string>] [-x exception] [-X <regex string as exception>] <target>
Option | Bedeutung | ||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
-c command |
Kommando das ausgeführt werden soll, wenn ein Event eingetroffen ist.
Diese Zeichenkette kennt folgende Ersetzungen:
| ||||||||||||||||||||||||||||||||||||||||||
-C charset |
Der zu verwendende Zeichensatz (Default ist utf-8) | ||||||||||||||||||||||||||||||||||||||||||
-e event[,event[,..]] |
Eine durch Komma separierte Liste mit inotify-Events auf die reagiert werden soll. Folgende Werte stehen zur Verfügung:
| ||||||||||||||||||||||||||||||||||||||||||
-h , --help |
|||||||||||||||||||||||||||||||||||||||||||
-m |
E-Mail Adresse, der Person, die benachrichtigt werden soll. | ||||||||||||||||||||||||||||||||||||||||||
-r |
Verzeichnis rekursiv überwachen. | ||||||||||||||||||||||||||||||||||||||||||
-s <on¦off> |
Auch nach syslog melden. (Default ist off ; disabled)
| ||||||||||||||||||||||||||||||||||||||||||
-t |
Ein Regex-Muster: Events nur Melden, wenn die Datei, die ein Event ausgelöst hat, darauf passt. | ||||||||||||||||||||||||||||||||||||||||||
-v |
Verbose: Ausführlichere Meldungen ausgeben. | ||||||||||||||||||||||||||||||||||||||||||
--version |
|||||||||||||||||||||||||||||||||||||||||||
-x |
Datei od. Verzeichnis das von der Überwachung ausgelassen werden soll. | ||||||||||||||||||||||||||||||||||||||||||
-X <regex string as exception> |
Ein Regex-Muster: Alle Dateien und Verzeichnisse die darauf passen, werden von der Überwachung ausgelassen. |
Daemon-Modus
Neben dem Kommandozeilen-Modus, kann iWatch auch als Daemon betrieben werden. Dessen Konfiguration auf einer XML-Datei basiert.
Um iWatch als Daemon zu starten nutzt man folgende Optionen:
iwatch [-d] [-f <configfile.xml>] [-p <pid file>] [-v]
Hinweis: Der Daemon kann allerdings auch vom init-System gestartet werden, wenn man dies in /etc/default/iwatch konfiguriert (Was auch die zu bevorzugende Variante sein sollte). |
Option | Variable in /etc/default/iwatch |
Bedeutung |
---|---|---|
-d |
START_DAEMON |
iWatch soll als Daemon starten. |
-f <configfile.xml> |
CONFIGFILE |
Es soll eine alternative Konfigurationsdatei genutzt werden; nicht /etc/iwatch.xml |
-p <pid file> |
PIDFILE |
Es soll eine alternative pid-Datei genutzt werden. |
-v |
Verbose: Ausführlichere Meldungen ausgeben. |
Vom init-System mit starten lassen
Damit iWatch beim Systemstart mit gestartet wird, muss das in /etc/default/iwatch aktiviert werden:
START_DAEMON=true
Per default ist das deaktiviert - auf false
gesetzt.
Aufbau der XML-Konfigurationsdatei
In der Konfigurationsdatei werden im Grunde die oben genannten Kommandozeilen-Optionen in XML-Tags abgebildet. Zum besseren Verständnis, schaut man sich die Beispiel-Konfiguration unter /etc/iwatch/iwatch.xml und auch /etc/iwatch/iwatch.dtd an! Letztere soll hier erklärt werden.
Das config-Tag
Die Konfigurationsdatei muss immer aus einem config-Tag bestehen, welches die weiteren Elemente der Konfiguration enthält. Dies dürfen ein guard-Element und beliebig viele watchlist-Elemente sein.
<!ELEMENT config (guard,watchlist+)> <!ATTLIST config charset CDATA "utf-8" >
Das guard-Element
Ist die Absender-Adresse. Es es muss einmal definiert werden.
<!ELEMENT guard (#PCDATA)> <!ATTLIST guard email CDATA #REQUIRED name CDATA #IMPLIED >
Das watchlist-Element
Diese Elemente gruppieren die Konfiguration und enthalten für jede Überwachung und/oder Ausnahme wiederum ein eigenes path-Element. Welche die eigentliche Konfiguration darstellen. Innerhalb eines config-Elementes, kann es beliebig viele watchlist-Elemente, mit wiederum beliebig vielen path-Elementen geben.
Eine watchlist muss auch ein title-Element, sowie einen contactpoint enthalten.
<!ELEMENT watchlist (title,contactpoint,path+)>
title
Das title-Element soll eine watchlist Beschreiben. Dieses Element ist nur innerhalb einer watchlist erlaubt.
<!ELEMENT title (#PCDATA)>
contactpoint
Mit dem contactpoint-Element muss jeder watchlist eine eigene Kontakt-Adresse zugeordnet werden. Dieses Element ist nur innerhalb einer watchlist erlaubt.
<!ELEMENT contactpoint (#PCDATA)> <!ATTLIST contactpoint email CDATA #REQUIRED name CDATA #IMPLIED >
Das path-Element
Innerhalb einer watchlist stellt es die einzelnen Überwachungen und Ausnahmen dar. Es ist zusammen mit dem watchlist-Element, der eigentliche Teil der Konfiguration. Das path-Element ist nur innerhalb einer watchlist erlaubt.
<!ELEMENT path (#PCDATA)> <!ATTLIST path type (single|recursive|exception|regexception) "single" alert (on|off) "off" events CDATA #IMPLIED exec CDATA #IMPLIED filter CDATA #IMPLIED syslog (on|off) "off" >
Attribute
type
: Kann einer der folgenden Werte sein.single
: Einfache Überwachung.recursive
: Rekursive Überwachung eines Verzeichnisses.exception
: Pfad von der Überwachung auslassen.regexception
: Regex-Muster: Alle Pfade die darauf passen auslassen.
alert
:off
würde keine E-Mail-Benachrichtigung an den contactpoint senden.events
: Liste der Events, auf die Reagiert werden soll.exec
: Kommando das bei eintreten eines Events ausgeführt wird.filter
: Regex-Muster: Events nur melden, wenn der Pfad der es ausgelöst hat, auf dieses Muster passt.syslog
: Eintreten eines Events auch nach Syslog melden.
Hinweis: Da die Attribute im Grunde nur die Optionen aus dem Kommandozeilen-Modus widerspiegeln. Lesen Sie bitte auch den Abschnitt Kommandozeilen-Modus. Dort finden sich entsprechend mehr Details. |
Der Pfad bzw. das Regex-Muster wird im Tag selbst angegeben (Ein Beispiel):
<config>
<guard email="root@localhost" name="iWatch"/>
<watchlist>
<title>Operating System</title>
<contactpoint email="root@localhost" name="Wiki der Wikinger"/>
<path type="recursive" events="default">/pfad</path>
</watchlist>
</config>
Tipps
Um bei Aktualisierung des Systems nicht unzählige false-positive
Mails zu erhalten, kann man den iWatch-daemon solange beenden
und danach wieder starten lassen.
Dazu erweitert man /etc/apt/apt.conf um folgenden Eintrag:
DPkg{ Pre-Invoke { "/etc/init.d/iwatch stop"; }; Post-Invoke { "/etc/init.d/iwatch start"; }; }
Alternativen und ähnliche Programme
- incron: cron-ähnlicher Daemon, der auf Grundlage der inotify-Events arbeitet.
- inotify-tools: Kommandozeilenprogramme für eine einfache Schnittstelle zu inotify.
- dnotify: Führt einen Befehl aus, wenn sich ein Verzeichnis ändert.