Respuestas:
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 tailf
para 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 your-xmpp-id@gmail.com
Y agregue command = /path/to/script.sh
a 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 recipient@gmail.com; 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 ...)
grep
, es probable que tenga que agregar --line-buffered
al encantamiento para que aparezcan los mensajes). Acabo de pasar una buena hora tratando de descubrir por qué los mensajes aparecieron al azar o no.
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 = '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)
Utilicé información en esa página para conectar xmpppy a Google Talk.