====== Verzeichnisüberwachung: watcher ======
Nachfolgend soll die Installation und Arbeitsweise des Überwachungsprogrammes **''[[https://github.com/splitbrain/Watcher|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) ''{{debian-linux:watcher.py}}'' (von [[https://github.com/splitbrain/Watcher/blob/master/watcher.py]]) und die Konfigurationsdatei ''{{ debian-linux: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=''**
* PID-Datei: **''pidfile=''**
\\
==== Überwachung ====
Jede Überwachung (gekeinnzeichniet mit ''[]'') besteht aus mehreren Parametern:
* Verzeichnis, welches überwacht werden soll: **''watch=''**
* Ereignis, auf welches reagiert wird: **''events= [,, ...]''**
* **''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= [,, ...]''**
* 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=''**
* **''$$''**: 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@gmx.de|Steffen Bornemann]] 08.11.2018//
\\
{{tag>watcher logrotate update-rc.d}}