Хвостовой сервер входит в 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, как правило, становятся довольно раздражающими, если они слишком частые ...)


Веселое. Я только что нашел 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
Алекс Жасмин
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.