syslog-ng不运行脚本

时间:2014-08-05 08:34:48

标签: python syslog-ng

我想使用syslog-ng接收netgear日志,并使用python脚本进程。

但是syslog-ng没有运行python脚本。

系统日志-ng.config

@version:3.2

options {
    flush_lines (0);
    time_reopen (10);
    log_fifo_size (1000);
    long_hostnames (off);
    use_dns (no);
    use_fqdn (no);
    create_dirs (no);
    keep_hostname (yes);
};

source s_sys {
    udp(ip(0.0.0.0) port(514));
    };

destination d_python{
    program("/usr/local/bin/python /opt/syslog.py");    
    #program("/bin/echo 'haha' >> /tmp/test");
    };

log { source(s_sys); destination(d_python);};

和像这样的python脚本

#!/usr/local/bin/python
#coding:utf8

import os
import sys
import datetime

f = open('/var/log/pnet.log', 'a')

f.write('\nstart\n')
f.write('args\n')
f.write('%s\n' % sys.argv)
if not sys.stdin.isatty():
    f.write('stdin\n')
    f.write('%s\n' % date.date.now().isoformat() )
    tty_read = sys.stdin.read()
    f.write("'''\n")
    f.write(tty_read)
    f.write("\n'''\n")
f.write('end\n')
f.close()

该脚本已经是777 即使我改变我的配置使用' echo'直接输入文件,也没有写一个字......

所以...为什么?

2 个答案:

答案 0 :(得分:0)

愚蠢的问题,但你有传入的日志吗?如果您使用简单的文件目标而不是程序,是否收到日志?如果没有,问题不在程序目的地。

另外,尝试更改flush_lines(0);选项为1以查看它是否有帮助。

问候,

Robert Fekete

答案 1 :(得分:0)

我可以向您展示我的代码供参考:

我的syslog-ng.conf

source s_test{
    file("/home/test/in.log" follow-freq(1) flags(no-parse));
    };  
destination d_test{
    program ("/home/test/out.py" flush_lines(1) flags(no_multi_line));                                                                                                        
    };  
log {
    source(s_test);
    destination(d_test);
    flags(flow-control);
    };

我的out.py

#!/usr/bin/env python
# encoding: utf-8

import sys 
while True:
    line = sys.stdin.readline()
    file = open("/home/test/out_from_python.log","a")
    file.write(line)
    file.close()

当您输入echo "something" >> /home/test/in.log时,/home/test/out_from_python.log

会有新的日志