Tail Server meldet sich bei XMPP an?

8

Ich habe also zwei Dateien, und wenn in einer dieser Dateien eine neue Zeile angezeigt wird, möchte ich eine IM (vorzugsweise Jabber oder gTalk) erhalten, die den Inhalt dieser Zeile enthält. Habt ihr Vorschläge für einen Linux-Daemon oder etwas, das das könnte?

icco
quelle

Antworten:

14

Wenn Sie über Syslog protokollieren, kann Metalog einen Befehl ausführen, wenn eine Nachricht protokolliert wird, die einem bestimmten Kriterium entspricht. Andernfalls können Sie tailfin einer Protokolldatei nach neuen Zeilen suchen.

sendxmpp ist ein kleines Perl-Skript zum Senden von XMPP-Nachrichten (möglicherweise bereits als Paket für Ihre Lieblingsdistribution verfügbar).

Sie können diese beiden ohne allzu große Schwierigkeiten mit einem Shell-Skript zusammenfügen. Erstellen Sie für den Metalog-Fall ein Skript wie das folgende:

#!/bin/sh
echo $* |sendxmpp [email protected]

Und fügen Sie command = /path/to/script.shden entsprechenden Abschnitt der metalog.conf hinzu

Für den Fall tailf könnten Sie so etwas versuchen und auf eine beständige Weise ausführen:

tailf /var/log/file-to-watch.log |(while true; do read M; echo $M | sendxmpp [email protected]; done)

sendxmpp benötigt ein gültiges XMPP-Konto. Informationen zum Konfigurieren des zu verwendenden Kontos finden Sie in der Manpage.

(Aus meiner Erfahrung werden von XMPP gelieferte Fehlermeldungen ziemlich ärgerlich, wenn sie zu häufig sind ...)

b0fh
quelle
Urkomisch. Ich habe gerade sendxmpp gefunden und so etwas eingerichtet. Hatte aber noch nichts von tailf gehört, danke.
icco
Randnotiz: Überprüfen Sie bei Problemen das Pufferverhalten Ihrer Pipe! (Wenn Sie es tun grep, müssen Sie wahrscheinlich --line-buffereddie Beschwörung hinzufügen , damit Nachrichten angezeigt werden.) Ich habe gerade eine gute Stunde damit verbracht, herauszufinden, warum Nachrichten willkürlich oder gar nicht angezeigt wurden.
niemand
2

Ich habe dieses kleine Python-Skript erstellt. Sie können es als Ausgangspunkt verwenden

import xmpp, os, time

login     = 'Your.Login' # @gmail.com
pwd       = 'YourPassword'
recipient = '[email protected]'
logfile   = "/home/myself/test.log"

def sendmsg(text):
  global login, pwd, recipient
  cnx = xmpp.Client('gmail.com')
  cnx.connect( server=('talk.google.com',5223) )
  cnx.auth(login,pwd, 'botty')
  cnx.send( xmpp.Message( recipient , text ) )

oldsize = newsize = os.path.getsize(logfile)
while True:
  newsize = os.path.getsize(logfile)
  if newsize != oldsize:
    f = open(logfile)
    f.seek(oldsize, os.SEEK_SET)
    s = f.read()
    if s[-1] == '\n':
      sendmsg(s)
      oldsize = f.tell()
    f.close()
  time.sleep(10)

Ich habe Informationen auf dieser Seite verwendet, um xmpppy mit Google Talk zu verbinden.

Alex Jasmin
quelle
Benötigt dies Python-Abhängigkeiten oder ist XMPP in Base enthalten?
Tom
1
Sie müssen es von xmpppy.sourceforge.net
Alex Jasmin