【问题标题】:Syslog-ng not flushing output to python programSyslog-ng 没有将输出刷新到 python 程序
【发布时间】:2015-09-07 07:44:18
【问题描述】:

我已设置 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 进行测试

高度赞赏任何潜在客户。

【问题讨论】:

  • 你怎么知道它没有转发?由于缓冲,它不会立即出现在success.txt 中。如果需要,请在f1.write(line) 之后致电f1.flush()
  • 我按照你说的添加了 f1.flush() ,但还是没有出现在success.txt中。我的目的是测试事件是否立即得到处理。

标签: python syslog-ng


【解决方案1】:

尝试在前台模式下运行 syslog-ng 并启用调试消息

syslog-ng -Fedtv

也许您会得到有关程序目标为什么没有收到消息的信息。

顺便问一下,syslog-ng有没有可能读过这个文件一次?

在这种情况下,您应该删除持久化文件 (var/syslog-ng.persist) 以强制 syslog-ng 从头开始​​读取此文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多