![尾部服务器登录到 XMPP?](https://linux22.com/image/520422/%E5%B0%BE%E9%83%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%99%BB%E5%BD%95%E5%88%B0%20XMPP%EF%BC%9F.png)
所以我有两个文件,如果其中一个文件上出现了新行,我希望收到包含该行内容的即时消息(最好是 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。