尾部服务器登录到XMPP吗?


8

因此,我有两个文件,并且如果这两个文件中的任何一个出现新行,我都希望收到包含该行内容的IM(最好是jabber或gTalk)。你们对Linux守护程序有什么建议吗?

Answers:


14

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

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

您可以使用shell脚本将这两个脚本缝合在一起而不会太困难。对于metaog情况,创建一个类似于以下脚本:

#!/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并进行了类似设置。没听说过tailf,谢谢。
icco 2010年

注意:如果出现问题,请检查管道的缓冲行为!(如果您正在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相关性,或者Base随附XMPP?
汤姆(Tom)2010年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.