我正在尝试设置一个邮件日志解析器,它将特定行提取到另一个文件中,然后将 rsync'd 到远程服务器。我遇到的问题是,当 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()