Server Fault is a question and answer site for system and network administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

So I have two files, and if a new line appears on either of these files, I'd like to receive an IM (preferably jabber or gTalk) containing the contents of that line. Do you guys have any suggestions for a Linux daemon or something that could do that?

share|improve this question
up vote 12 down vote accepted

If you are logging trough syslog, Metalog has support to execute a command whenever a message matching some criterion gets logged. Otherwise, you can use tailf to watch for new lines in a log file.

sendxmpp is a small perl script to send XMPP messages (possibly already available as a package for your favorite distribution)

You could stitch those two together with a shell script without too much difficulty. For the metalog case, create a script like this one:

echo $* |sendxmpp

And add command = /path/to/ to the relevant section of metalog.conf

For the tailf case, you could try something like this, run in a persistent way:

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

sendxmpp needs a valid XMPP account, see the man page for how to configure the account to be used.

(from my experience, XMPP-delivered error messages tend to become quite annoying if they're too frequent...)

share|improve this answer
Hilarious. I just found sendxmpp and set something like this up. Hadn't heard of tailf though, thanks. – icco Jul 30 '10 at 20:42
Side note: In case of problems, check the buffering behavior of your pipe! (If you're greping, you probably have to add --line-buffered to the incantation for messages to show up.) I just spent a good hour trying to find out why messages appeared haphazardly or not at all. – nobody Jul 13 '12 at 4:07

I made that little python script. You can use it as a starting point

import xmpp, os, time

login     = 'Your.Login' #
pwd       = 'YourPassword'
recipient = ''
logfile   = "/home/myself/test.log"

def sendmsg(text):
  global login, pwd, recipient
  cnx = xmpp.Client('')
  cnx.connect( server=('',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), os.SEEK_SET)
    s =
    if s[-1] == '\n':
      oldsize = f.tell()

I used information on that page for connecting xmpppy to Google Talk.

share|improve this answer
Does this require any Python dependancies or is XMPP included with Base? – Tom Jul 30 '10 at 20:38
You have to install it from – Alexandre Jasmin Jul 30 '10 at 20:39

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.