Iwatch

Aus DebianforumWiki
Wechseln zu: Navigation, Suche

Debianpackage.png 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:

Marke Ersetzung
%c Event cookie Nummer
%e Event Name
%f Pfad der Datei, die das Event ausgelöst hat.
%F Alter Dateiname, nur relevant für das moved_to Event.
%p Programmname (iWatch)
%v Versionsnummer
-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:

Event Bedeutung (Teilweise von wiki.ubuntuusers.de entnommen)
access Eine Datei wurde zum gelesen.
modify Eine Datei wurde geändert.
attrib Die Metadaten einer Datei wurden geändert (Zeitstempel, Rechte, erweiterte Attribute).
close_write Eine Datei wurde geschlossen nachdem sie zum schreiben geöffnet wurde, sie muss aber nicht verändert worden sein.
close_nowrite Eine Datei wurde geschlossen nachdem sie schreibgeschützt geöffnet wurde.
close Eine Datei wurde geschlossen, ungeachtet dessen ob schreibgeschützt oder nicht.
open Eine Datei wurde geöffnet.
moved_from Eine Datei oder ein Verzeichnis wurde aus oder in ein überwachtes Verzeichnis verschoben.
moved_to Eine Datei oder ein Verzeichnis wurde in ein zu überwachendes Verzeichnis verschoben oder im Verzeichnis selbst verschoben.
move Wie moved_to und moved_from zusammen.
create Eine Datei wurde erstellt.
delete Eine Datei wurde gelöscht.
delete_self Eine überwachte Datei oder ein überwachtes Verzeichnis wurde gelöscht. Danach wird die Überwachung abgeschaltet.
unmount Das Dateisystem, auf dem sich die Überwachung befand, wurde ausgehängt. Danach wird die Überwachung abgeschaltet. Dieses Event kann auch auftreten, wenn es nicht explizit überwacht wurde.
q_overflow Event queued overflowed.
ignored Datei wurde ignoriert.
isdir Es handelt sich um ein Verzeichnis.
oneshot Only send event once.
all_events Umfasst alle Events.
default Umfasst folgende Events: close_write, create, delete, move, delete_self und move_self.
-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.png 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.png 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

  • Debianpackage.png incron: cron-ähnlicher Daemon, der auf Grundlage der inotify-Events arbeitet.


  • Debianpackage.png inotify-tools: Kommandozeilenprogramme für eine einfache Schnittstelle zu inotify.
  • Debianpackage.png dnotify: Führt einen Befehl aus, wenn sich ein Verzeichnis ändert.