Respostas:
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 tailf
para 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 ...)
grep
entendendo, provavelmente precisará aumentar --line-buffered
o encantamento para que as mensagens apareçam.) Passei uma boa hora tentando descobrir por que as mensagens apareciam aleatoriamente ou não.
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.