特定の行を別のファイルに抽出し、リモート サーバーに rsync するメール ログ パーサーをセットアップしようとしています。私が抱えている問題は、rsync が書き込まれているファイルを読み取るときに、パーサーの機能が停止するように見えることです。これは、メールログが一貫して書き込まれているため、パーサーが tail -f をエミュレートしているためだと思います。
では、rsync がこのコード (result_file) で書いているファイルにアクセスできるようにするにはどうすればよいでしょうか。
#! /usr/bin/python
import time, re, sys
result_file = open('/var/log/mrp_mail_parsed.log', 'a+')
def tail(logfile):
logfile.seek(0,2)
while True:
line = logfile.readline()
if not line:
time.sleep(0.1)
continue
yield line
if __name__ == '__main__':
logfile = open('/var/log/maillog', 'r')
logline = tail(logfile)
for line in logline:
match = re.search(r'.+postfix-mrp.+', line)
if match:
result_file.write(line,)
result_file.flush()