Я установил 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
Любые ссылки очень ценятся.
Откуда вы знаете, что это не пересылка? Он не будет отображаться в 'success.txt' сразу из-за буферизации. Если вы этого хотите, тогда вызовите 'f1.flush()' после 'f1.write (line)'. – cdarke
Я добавил f1.flush(), как вы сказали, но он все еще не отображается в файле success.txt. Моя цель - проверить, будет ли событие немедленно обработано. – cmbendre