Le serveur de queue se connecte à XMPP?

8

J'ai donc deux fichiers, et si une nouvelle ligne apparaît sur l'un de ces fichiers, j'aimerais recevoir un message instantané (de préférence jabber ou gTalk) contenant le contenu de cette ligne. Avez-vous des suggestions pour un démon Linux ou quelque chose qui pourrait le faire?

icco
la source

Réponses:

14

Si vous vous connectez via syslog, Metalog prend en charge l'exécution d'une commande chaque fois qu'un message correspondant à un critère est enregistré. Sinon, vous pouvez utiliser tailfpour rechercher de nouvelles lignes dans un fichier journal.

sendxmpp est un petit script perl pour envoyer des messages XMPP (éventuellement déjà disponible sous forme de package pour votre distribution préférée)

Vous pouvez assembler ces deux éléments avec un script shell sans trop de difficulté. Pour le boîtier metalog, créez un script comme celui-ci:

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

Et ajoutez command = /path/to/script.shà la section appropriée de metalog.conf

Pour le cas tailf, vous pouvez essayer quelque chose comme ceci, exécuté de manière persistante:

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

sendxmpp a besoin d'un compte XMPP valide, consultez la page de manuel pour savoir comment configurer le compte à utiliser.

(d'après mon expérience, les messages d'erreur fournis par XMPP ont tendance à devenir assez ennuyeux s'ils sont trop fréquents ...)

b0fh
la source
Hilarant. Je viens de trouver sendxmpp et j'ai installé quelque chose comme ça. Je n'avais pas entendu parler de tailf cependant, merci.
icco
Note latérale: En cas de problème, vérifiez le comportement de mise en mémoire tampon de votre pipe! (Si vous êtes greping, vous devez probablement ajouter --line-bufferedà l'incantation pour que les messages apparaissent.) Je viens de passer une bonne heure à essayer de comprendre pourquoi les messages sont apparus au hasard ou pas du tout.
personne
2

J'ai fait ce petit script python. Vous pouvez l'utiliser comme point de départ

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)

J'ai utilisé des informations sur cette page pour connecter xmpppy à Google Talk.

Alex Jasmin
la source
Cela nécessite-t-il des dépendances Python ou XMPP est-il inclus avec Base?
Tom
1
Vous devez l'installer à partir de xmpppy.sourceforge.net
Alex Jasmin