¿El servidor de cola se conecta a XMPP?

8

Así que tengo dos archivos, y si aparece una nueva línea en cualquiera de estos archivos, me gustaría recibir un mensaje instantáneo (preferiblemente jabber o gTalk) que contenga el contenido de esa línea. ¿Tienen alguna sugerencia para un demonio de Linux o algo que pueda hacer eso?

icco
fuente

Respuestas:

14

Si está registrando a través de syslog, Metalog tiene soporte para ejecutar un comando cada vez que se registra un mensaje que coincide con algún criterio. De lo contrario, puede usar tailfpara buscar nuevas líneas en un archivo de registro.

sendxmpp es un pequeño script perl para enviar mensajes XMPP (posiblemente ya esté disponible como un paquete para su distribución favorita)

Podrías unir esos dos con un script de shell sin demasiada dificultad. Para el caso del metalog, cree un script como este:

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

Y agregue command = /path/to/script.sha la sección relevante de metalog.conf

Para el caso tailf, puede intentar algo como esto, ejecutar de manera persistente:

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

sendxmpp necesita una cuenta XMPP válida; consulte la página de manual para saber cómo configurar la cuenta que se utilizará.

(desde mi experiencia, los mensajes de error entregados por XMPP tienden a ser bastante molestos si son demasiado frecuentes ...)

b0fh
fuente
Divertidísimo. Acabo de encontrar sendxmpp y configuré algo como esto. Aunque no había oído hablar de tailf, gracias.
icco
Nota al margen: ¡En caso de problemas, verifique el comportamiento de amortiguación de su tubería! (Si lo hace grep, es probable que tenga que agregar --line-bufferedal encantamiento para que aparezcan los mensajes). Acabo de pasar una buena hora tratando de descubrir por qué los mensajes aparecieron al azar o no.
nadie
2

Hice ese pequeño script de Python. Puedes usarlo como punto de partida

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)

Utilicé información en esa página para conectar xmpppy a Google Talk.

Alex Jasmin
fuente
¿Esto requiere dependencias de Python o se incluye XMPP con Base?
Tom
1
Tienes que instalarlo desde xmpppy.sourceforge.net
Alex Jasmin