Verzeichnisüberwachung: watcher

Nachfolgend soll die Installation und Arbeitsweise des Überwachungsprogrammes watcher beschrieben werden. Es damit möglich ein Verzeichnis (inklusive aller Unterverzeichnisse) zu überwachen und beim Eintreten einer Änderung bestimmte Aktionen auszulösen. Ein verwandtes Programm ist incron (welches aber nur auf Veränderung von Dateien in einem Verzeichnis reagiert).


Abhängigkeiten

Das Programm watcher ist ein Python-Skript und benötigt demnach bestimmte Python-Pakete als Abhängigkeit:

~# apt-get install python python-pyinotify


Installation

Es werden zwei Dateien benötigt, der Dienst (Python-Skript) watcher.py (von https://github.com/splitbrain/Watcher/blob/master/watcher.py) und die Konfigurationsdatei watcher.ini (von https://github.com/splitbrain/Watcher/blob/master/watcher.ini). Das Skript wird ins Verzeichnis /etc/init.d/ kopiert, damit es bei einem Rechnerstart automatisch mit startet. Die Konfigurationsdatei wird nach /etc/ kopiert.


Der Dienst muss für einen automatischen Start in die Runlevel eingetragen werden:

~# chmod +x /etc/init.d/watcher.py
~# update-rc.d watcher.py defaults
~# update-rc.d watcher.py enable 2 3 4 5


  • Dienst starten und stoppen:
~# /etc/init.d/watcher.py start
~# /etc/init.d/watcher.py stop


  • Dienst im Vordergrund (nicht als Dämon) starten:
~# /etc/init.d/watcher.py debug


Syntax

Die Konfigurationsdatei /etc/watcher.ini gliedert sich in zwei Bereiche. Der allgemeine Teil ([DEFAULT]) gilt für alle Überwachungen. Jede Überwachung besitzt einen eigenen Abschnitt.


Allgemeiner Teil

Der allgmeine Teil besitzt zwei Parameter:

  • Logdatei: logfile=<Ort der Logdatei>
  • PID-Datei: pidfile=<Ort der PID-Datei>


Überwachung

Jede Überwachung (gekeinnzeichniet mit [<Name der Überwachung>]) besteht aus mehreren Parametern:

  • Verzeichnis, welches überwacht werden soll: watch=<Verzeichnisname>
  • Ereignis, auf welches reagiert wird: events=<Event> [,<Event>, …]
    • access: Dateizugriff (lesender)
    • attribute_change: Änderung des Dateiattributes
    • write_close: Geschlossener Schreibzugriff
    • nowrite_close Ungeöffneter Schreibzugriff
    • create: Datei wurde neu erstellt
    • delete: Datei wurde gelöscht
    • self_delete: Datei hat sich selbst gelöscht
    • modify: Datei wurde verändert
    • self_move: Datei hat sich selbst verschoben
    • move_from: Datei wurde von innen nach außerhalb des überwachten Verzeichnisses verschoben
    • move_to: Datei wurde von außerhalb des überwachten Verzeichnisses hinein verschoben
    • open: Datei wurde geöffnet
    • all: Eine der vorher genannten Ereignisse
    • move: Eine Kombination aus move_from und move_to
    • close: Eine Kombination von write_close und nowrite_close
  • Verzeichnisse, die im überwachten Verzeichnis ausgelassen werden (mit absolutem Pfad): excluded=<Verzeichnis> [,<Verzeichnis>, …]
  • Rekursive Überwachung (an/aus): recursive=true|false
  • Automatische Überwachung neuer Unterverzeichnisse (an/aus): autoadd=true|false
  • Kommando, welches bei Ereigniseintritt ausgeführt werden soll: command=<Kommando>
    • $$: Dollarzeichen
    • $watched: Überwachtes Verzeichnis
    • $filename: Datei, auf welches Ereignis zutraf


Logrotation

Die Logdatei, die geschrieben wird, sollte regelmäßig durch logrotate bereinigt werden.


  • Erstellen der Konfigurationsdatei „/etc/logrotate.d/watcher“:
/var/log/watcher.log {
        weekly
        rotate 12
        compress
        delaycompress
        missingok
        notifempty
        create 644 root root
}


Die Logrotation kann überprüft werden:

~# logrotate -f /etc/logrotate.d/watcher


Überprüfung

Wurde der Dienst gestartet, kann dies wie folgt überprüft werden:

~# ps -ef | grep [w]atcher.py
root      9793     1  0 10:57 ?        00:00:00 python /etc/init.d/watcher.py start



Steffen Bornemann 08.11.2018

 
 software/watcher.txt · Zuletzt geändert: 2025/05/08 22:16 von 127.0.0.1
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: GNU Free Documentation License 1.3
Recent changes RSS feed Driven by DokuWiki