2015-09-07 1 views
0

Я установил syslog-ng, чтобы зачеркнуть файл и переслать каждое новое событие в скрипт python, который обработает его.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, который я тестирую с помощью записи на успех. Txt

Любые ссылки очень ценятся.

+0

Откуда вы знаете, что это не пересылка? Он не будет отображаться в 'success.txt' сразу из-за буферизации. Если вы этого хотите, тогда вызовите 'f1.flush()' после 'f1.write (line)'. – cdarke

+0

Я добавил f1.flush(), как вы сказали, но он все еще не отображается в файле success.txt. Моя цель - проверить, будет ли событие немедленно обработано. – cmbendre

ответ

1

Попробуйте запустить в системном журнале-нг в режиме переднего плана с поддержкой отладочных сообщений

syslog-ng -Fedtv

Возможно, вы получите информацию о том, почему целевой программы не получает сообщения.

Кстати, возможно ли, что syslog-ng прочитал этот файл один раз?

В этом случае вы должны удалить файл persist (var/syslog-ng.persist), чтобы заставить syslog-ng прочитать этот файл с самого начала.

Смежные вопросы