Answers:
如果您是通过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传递的错误消息太频繁,就会变得很烦人。)
grep
唱歌,则可能必须增加--line-buffered
咒语才能显示消息。)我只是花了一个小时,试图找出为什么消息偶然出现或根本不出现。
我做了那个小的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。