Il server di coda accede a XMPP?


8

Quindi ho due file e se una nuova riga appare su uno di questi file, mi piacerebbe ricevere un messaggio istantaneo (preferibilmente jabber o gTalk) contenente il contenuto di quella riga. Ragazzi avete qualche suggerimento per un demone Linux o qualcosa che potrebbe farlo?

Risposte:


14

Se si sta effettuando la registrazione tramite syslog, Metalog ha il supporto per eseguire un comando ogni volta che viene registrato un messaggio che soddisfa alcuni criteri. Altrimenti, è possibile utilizzare tailfper cercare nuove righe in un file di registro.

sendxmpp è un piccolo script perl per inviare messaggi XMPP (probabilmente già disponibile come pacchetto per la tua distribuzione preferita)

Potresti ricucire quei due insieme con uno script di shell senza troppe difficoltà. Per il caso metalog, crea uno script come questo:

#!/bin/sh
echo $* |sendxmpp your-xmpp-id@gmail.com

E aggiungere command = /path/to/script.shalla sezione pertinente di metalog.conf

Per il caso tailf, potresti provare qualcosa del genere, eseguire in modo persistente:

tailf /var/log/file-to-watch.log |(while true; do read M; echo $M | sendxmpp recipient@gmail.com; done)

sendxmpp necessita di un account XMPP valido, consultare la pagina man per come configurare l'account da utilizzare.

(dalla mia esperienza, i messaggi di errore forniti da XMPP tendono a diventare piuttosto fastidiosi se sono troppo frequenti ...)


Divertente. Ho appena trovato sendxmpp e impostato qualcosa del genere. Non avevo sentito parlare di Tailf, grazie.
Icco,

Nota a margine: in caso di problemi, controlla il comportamento di buffering della tua pipe! (Se stai greping, probabilmente devi aggiungere --line-bufferedall'incantesimo affinché i messaggi vengano visualizzati.) Ho appena trascorso un'ora buona cercando di scoprire perché i messaggi sono apparsi a casaccio o per niente.
nessuno il

2

Ho realizzato quel piccolo script in pitone. Puoi usarlo come punto di partenza

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)

Ho usato le informazioni su quella pagina per connettere xmpppy a Google Talk.


Questo richiede dipendenze Python o XMPP è incluso con Base?
Tom,

1
Devi installarlo da xmpppy.sourceforge.net
Alex Jasmin il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.