テールサーバーはXMPPにログインしますか?


8

したがって、2つのファイルがあり、これらのファイルのいずれかに新しい行が表示された場合、その行の内容を含むIM(できればjabberまたはgTalk)を受け取りたいと思います。Linuxデーモンやそれを実行できる何かについて何か提案はありますか?

回答:


14

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が提供するエラーメッセージは、頻度が高すぎると非常に不快になる傾向があります...)


陽気な、こっけいな。私はsendxmppを見つけて、このようなものを設定しました。テールフのことは聞いていませんでした、ありがとう。
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トークに接続しました。


これにはPythonの依存関係が必要ですか、それともXMPPがBaseに含まれていますか?
トム

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.