回答:
syslogを使用してログを記録している場合、Metalogは、何らかの基準に一致するメッセージがログに記録されるたびにコマンドを実行するサポートを持っています。それ以外の場合は、を使用tailf
してログファイルの新しい行を監視できます。
sendxmppは、XMPPメッセージを送信するための小さなperlスクリプトです(おそらく、お気に入りのディストリビューションのパッケージとしてすでに入手可能です)。
この2つをシェルスクリプトでつなぎ合わせるのはそれほど難しくありません。メタログの場合は、次のようなスクリプトを作成します。
#!/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アカウントが必要です。使用するアカウントを構成する方法については、manページを参照してください。
(私の経験から、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)