Приветствую! Наткнулся на некую «особенность» то ли перла, то ли centos7, а то ли и rsyslog.
Дано:
- Centos7 (Linux test 3.10.0-123.9.3.el7.x86_64 #1 SMP Thu Nov 6 15:06:03 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux)
- Perl (This is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-linux-thread-multi)
- rsyslog (rsyslogd 7.4.7)
Хочу:
- Просто повешать некий перловый скрипт в бесконечный цикл и передавать ему логи из rsyslog
Что сделано:
- Дефолтно настроено всё (Система «из коробки»), своими кривыми руками не успел никуда ещё залезть.
- В конфиг rsyslog добавлено:
$ModLoad omprog # Enables filter programs to futher analyze logs $ActionOMProgBinary /test.pl *.* :omprog:;RSYSLOG_TraditionalFileFormat
- И написан, собсно, сам test.pl
#!/usr/bin/perl use strict; use warnings; open (LOG , ">> /tmp/test") or die ("Can't open file :: $!\n"); while (<>) { print LOG $_; }
Результат:
- Запускается всё без ошибок, скрипт успешно демонизируется, но всё, что он пишет в /tmp/test это одну строку при рестарте rsyslog:
Feb 24 14:50:16 test rsyslogd: [origin software="rsyslogd" swVersion="7.4.7" x-pid="19880" x-info="http://www.rsyslog.com"] exiting on signal 15.
Что предпринято в связи с этим до обращения на форум:
- Я написал «скрипт» на bash
#!/bin/bash while read LINE; do echo $LINE >> /tmp/testoutput done
и, о чудо (!), он пишет в файл абсолютно всё, что пишет rsyslog в логи.
Вопрос:
- Как это объяснить?
- Как заставить perl так же писать _всё_ в файл, что пишет rsyslog в логи?
Если это глупый вопрос - извиняюсь, я не очень сильный программист :) Заранее спасибо!