Хвостовой сервер входит в XMPP?

8

Итак, у меня есть два файла, и если в любом из этих файлов появится новая строка, я бы хотел получить IM (предпочтительно jabber или gTalk), содержащий содержимое этой строки. Ребята, у вас есть предложения по поводу демона Linux или чего-то такого, что могло бы сделать это?

АКОС
источник

Ответы:

14

Если вы ведете журнал через системный журнал, Metalog поддерживает выполнение команды всякий раз, когда в журнале регистрируется сообщение, соответствующее какому-либо критерию. В противном случае вы можете использовать tailfдля поиска новых строк в файле журнала.

sendxmpp - это небольшой Perl-скрипт для отправки сообщений XMPP (возможно, уже доступный в виде пакета для вашего любимого дистрибутива)

Вы можете сшить эти два вместе с помощью сценария оболочки без особых проблем. Для случая metalog создайте скрипт, подобный следующему:

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

И добавить command = /path/to/script.shв соответствующий раздел metalog.conf

В случае с tailf, вы можете попробовать что-то вроде этого, запустить постоянно:

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

sendxmpp нужна действительная учетная запись XMPP, обратитесь к странице руководства, чтобы узнать, как настроить учетную запись для использования.

(Исходя из моего опыта, сообщения об ошибках XMPP, как правило, становятся довольно раздражающими, если они слишком частые ...)

b0fh
источник
Веселое. Я только что нашел sendxmpp и настроил что-то вроде этого. Хотя не слышал о хвосте, спасибо.
icco
Примечание: в случае проблем проверьте поведение буферизации вашей трубы! (Если вы думаете grep, вам, вероятно, придется добавить --line-bufferedв заклинание сообщения, которые будут отображаться.) Я потратил целый час, пытаясь выяснить, почему сообщения казались случайными или нет вообще.
никто не
2

Я сделал этот маленький скрипт на Python. Вы можете использовать его в качестве отправной точки

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)

Я использовал информацию на этой странице для подключения xmpppy к Google Talk.

Алекс Жасмин
источник
Требует ли это каких-либо зависимостей Python или XMPP включен в Base?
Том
1
Вы должны установить его с xmpppy.sourceforge.net
Алекс Жасмин