Linux: Benutzer werden benachrichtigt, wenn sich eine Datei ändert

3163
Sheldon Ross

Hier ist eine allgemeinere Verwendungsfrage.

Wie kann ich eine Protokolldatei auf bestimmte Änderungen überwachen und in Ubuntu eine Benachrichtigungsbenachrichtigung verwenden, um zu warnen, wenn die Änderungen eintreten?

URSPRÜNGLICHE FRAGE:

Ich versuche, Druckquoten für Drucker hier im Büro festzulegen. Es wird jedoch angezeigt, wenn das Kontingent erreicht ist, der Druck nur im Hintergrund fehlschlägt und der Benutzer keine Ahnung hat, was passiert.

Die Seitenquoten werden durch Ändern der PageLimit-Direktive in /etc/cups/printers.conf eingerichtet

Es scheint, ich bekomme die Nachricht

E [04 / Mar / 2013: 15: 34: 28 -0700] Zurückgeben des IPP-Client-Fehlers für Create-Job nicht möglich (ipp: // localhost: 631 / drucker / Hewlett-Packard-HP-LaserJet-4100- MFP) von localhost

in meinem Protokoll unter / var / log / cups / error_log.

Ich habe versucht, mit einem Befehl wie etwas zusammen zu hacken

`tail -f /var/log/cups/error_log | grep 'client-error-not-possible for Create-Job' DISPLAY=:0 notify-send -t 30000 -i 'notification-message-email' 'Printing Quota reached for this Printer'` 

Das scheint jedoch nicht wirklich zu funktionieren, da die Nachricht nur einmal in der ersten Fehlermeldung angezeigt wird.

Irgendwelche Gedanken oder Lösungen? Es scheint wirklich, dass es dafür eine vorgebackene Lösung geben sollte.

LÖSUNG

Incrontab hat perfekt funktioniert.

sudo apt-get install incrontab 

Fügen Sie dem Benutzer root zu /etc/incron.allow hinzu

sudo nano /etc/incron.allow 

Erstellen Sie das Skript monitorCUPSlog.sh

#!/bin/bash tail -n 1 /var/log/cups/error_log | grep 'client-error-not-possible' | DISPLAY=:0 notify-send -t 30000 -i 'notification-message-email' 'Daily Print Quota exceeded for this printer' 

Fügen Sie das Ereignis schließlich der Incrontab-Tabelle hinzu

sudo incrontab -e /var/log/cups/error_log IN_MODIFY /usr/local/bin/monitorCUPSlog.sh 

Scheint zu funktionieren, ja.

4

2 Antworten auf die Frage

5
Semafoor

Ich würde die Verwendung von Incrontab zur Überwachung von Änderungen am Dateisystem prüfen und dies mit dem kleinen Skript kombinieren, das Sie bereits haben.

Das sieht ungefähr so ​​aus.

Zuerst speichern Sie das Skript, das Sie als eine Datei ausgeführt werden soll, zum Beispiel wie cups_monitor.shin /usr/local/bin(vergessen Sie nicht, es ausführbar zu machen).

#!/bin/sh VAR=`tail -n 1 /var/log/cups/error_log | grep 'client-error-not-possible for Create-Job'` if [[ -n "$VAR" ]]; then echo "$VAR" | DISPLAY=:0 notify-send -t 30000 -i fi 

Vielleicht möchten Sie das überprüfen. Meine Skripte sind nie gleich richtig :). Beachten Sie außerdem, dass dieses Skript möglicherweise Ihre Fehlermeldung nicht erfasst, wenn eine andere Meldung folgt: Ich schaue nur die letzte Zeile der Protokolldatei ( -n 1) an; Dies sollte leicht zu ändern sein.

Bearbeiten Sie dann Ihre Incrontab

incrontab -e 

indem Sie die Zeile hinzufügen

/var/log/cups/error_log IN_CLOSE_WRITE /usr/local/bin/cups_monitor.sh 

Das IN_CLOSE_WRITEwird als "Ereignissymbol" bezeichnet und zeigt an, dass Sie Ihr Skript aufrufen möchten, wenn /var/log/cups/error_loges geschlossen wurde, nachdem es zum Schreiben geöffnet wurde. Weitere Ereignisse finden Sie in der Manpage von incrontab.

Denken Sie daran, dass ich das nicht getestet habe. Ob die Incrontab-Datei erfolgreich geändert wurde und ob sie Ihr Skript aufruft oder nicht, sehen Sie in syslog ( tail /var/log/syslog).

(Meine erste Antwort auf Stack Exchange! Yippee!)

0
amphibient

Sie können incron :: inotify verwenden, um angepasste Trigger an Dateien anzuhängen, die beispielsweise Protokolldateieinträge vornehmen oder bei Änderungsereignissen E-Mails senden.