尾部服务器登录到 XMPP?

尾部服务器登录到 XMPP?

所以我有两个文件,如果其中一个文件上出现了新行,我希望收到包含该行内容的即时消息(最好是 jabber 或 gTalk)。你们对可以执行此操作的 Linux 守护程序或程序有什么建议吗?

答案1

如果你通过 syslog 进行记录,元日志支持在记录符合某些条件的消息时执行命令。否则,您可以使用tailf它来监视日志文件中的新行。

发送xmpp是一个用于发送 XMPP 消息的小型 perl 脚本(可能已作为您最喜欢的发行版的软件包提供)

你可以用一个 shell 脚本轻松地将两者结合起来。对于 metalog 的情况,请创建一个如下脚本:

#!/bin/sh
echo $* |sendxmpp [email protected]

并添加command = /path/to/script.sh到metalog.conf的相关部分

对于 tailf 情况,您可以尝试这样的操作,以持久的方式运行:

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

sendxmpp 需要一个有效的 XMPP 帐户,请参阅手册页以了解如何配置要使用的帐户。

(根据我的经验,如果 XMPP 传送的错误消息过于频繁,就会变得非常烦人……)

答案2

我写了这个小 Python 脚本。你可以用它作为起点

import xmpp, os, time

login     = 'Your.Login' # @gmail.com
pwd       = 'YourPassword'
recipient = '[email protected]'
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。

相关内容