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?

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 your-xmpp-id@gmail.com

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 recipient@gmail.com; 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 ...)


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 = 'YourFriend@gmail.com'
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.


Benötigt dies Python-Abhängigkeiten oder ist XMPP in Base enthalten?
Tom

1
Sie müssen es von xmpppy.sourceforge.net
Alex Jasmin
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.