O servidor de cauda registra no XMPP?


8

Portanto, eu tenho dois arquivos e, se uma nova linha aparecer em um desses arquivos, gostaria de receber uma mensagem instantânea (de preferência jabber ou gTalk) contendo o conteúdo dessa linha. Vocês têm alguma sugestão para um daemon Linux ou algo que possa fazer isso?

Respostas:


14

Se você estiver registrando através do syslog, o Metalog terá suporte para executar um comando sempre que uma mensagem que corresponda a algum critério for registrada. Caso contrário, você pode usar tailfpara procurar novas linhas em um arquivo de log.

sendxmpp é um pequeno script perl para enviar mensagens XMPP (possivelmente já disponível como um pacote para sua distribuição favorita)

Você pode unir os dois com um script de shell sem muita dificuldade. Para o caso do metalog, crie um script como este:

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

E adicione command = /path/to/script.shà seção relevante do metalog.conf

No caso do tailf, você pode tentar algo como isto, executar de forma persistente:

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

O sendxmpp precisa de uma conta XMPP válida. Consulte a página de manual para saber como configurar a conta a ser usada.

(pela minha experiência, as mensagens de erro entregues pelo XMPP tendem a se tornar bastante irritantes se forem muito frequentes ...)


Hilário. Acabei de encontrar o sendxmpp e configurei algo assim. Não tinha ouvido falar de tailf, obrigado.
ICCO

Nota: Em caso de problemas, verifique o comportamento de buffer do seu tubo! (Se você estiver grepentendendo, provavelmente precisará aumentar --line-bufferedo encantamento para que as mensagens apareçam.) Passei uma boa hora tentando descobrir por que as mensagens apareciam aleatoriamente ou não.
ninguém

2

Eu fiz esse pequeno script python. Você pode usá-lo como ponto de partida

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)

Usei as informações nessa página para conectar o xmpppy ao Google Talk.


Isso requer dependências do Python ou o XMPP está incluído no Base?
Tom

1
Você deve instalá-lo a partir de xmpppy.sourceforge.net
Alex Jasmin
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.