0

私は、syslog-ng をセットアップしてファイルを追跡し、新しい各イベントをそれを処理する Python スクリプトに転送します。

私のsyslog-ng.confは次のようになります-

source s_src {
   file("/var/log/xyz.log" flags(no_parse);
};

destination d_dest {
   program("python -u /home/user1/processlog.py" flush_lines(1) flags(no_multi_line));
};

log { source(s_src); destination(d_dest); };

そして、processlog.pyには次のものが含まれています

#!/usr/bin/python
import sys

f1 = open('success.txt', 'a')

while 0 < 1:
  try:
    line = sys.stdin.readline()
    f1.write(line)

  except Exception, e:
    f = open('/tmp/error.txt','ab')
    f.write(e)
    f.close()
    exit(0)

このスクリプトは、コマンド ラインから完全に正常に動作します。各入力を受け取り、success.txt に書き込みます。

Syslog-ng も起動しますが、イベントを上記の python プログラムに転送しません。しかし、それはプログラムを開始します。

ps -ef| grep processlog
root      6242  6236  0 13:00 ?        00:00:00 /bin/sh -c python -u /home/user1/processlog.py
root      6244  6242  0 13:00 ?        00:00:00 python -u /home/user1/processlog.py

私もすべての権限を確認しました。しかし、xyz.log で新しいイベントが発生するたびに、python スクリプトに転送されません。これは、success.txt への書き込みでテストしています。

どんなリードも高く評価されます。

4

1 に答える 1

1

デバッグ メッセージを有効にして、syslog-ng をフォアグラウンド モードで実行してみてください。

syslog-ng -Fedtv

おそらく、プログラムの宛先がメッセージを受信しない理由についての情報が得られるでしょう。

ところで、syslog-ng がこのファイルを 1 回読み取った可能性はありますか?

この場合、持続ファイル (var/syslog-ng.persist) を削除して、syslog-ng がこのファイルを最初から読み取るようにする必要があります。

于 2015-09-08T10:28:58.247 に答える