Я пытаюсь следить за файлами журнала в Perl на Fedora, но, к сожалению, Fedora использует journalctl
для чтения двоичных файлов журнала, которые я не могу разобрать напрямую. Это, по моему мнению, означает, что я могу только читать файлы журнала Fedora, вызывая journalctl
.Как обрабатывать обновления из непрерывного процесса в Perl
Я попытался с помощью IO::Pipe
, чтобы сделать это, но проблема в том, что $p->reader(..)
ждет, пока journalctl --follow
делается записи выходных данных (который не будет никогда так --follow
, как tail -F
), а затем позволяет мне печатать все из которых не то, что я хочу , Я хотел бы иметь возможность установить функцию обратного вызова, которая будет вызываться каждый раз, когда новая строка будет напечатана в канале процесса, чтобы я мог анализировать/обрабатывать каждое новое событие журнала.
use IO::Pipe;
my $p = IO::Pipe->new();
$p->reader("journalctl --follow"); #Waits for process to exit
while (<$p>) {
print;
}
Вашего код работает отлично, когда я использую .e.g. 'tail -f messages' вместо' journalctl' (которого у меня нет). Вы пытались 'journalctl --follow --no-pager'? –
«-no-pager» - это красная селедка, так как любая разумная программа Unix будет вызывать только пейджер, когда его 'stdout' является' tty'. Я пробовал вашу программу на моем телефоне Jolla (у которого есть 'journalctl'), и он работает так, как ожидалось. Все, что не так, не в вашем коде! –
@HansLub Это работает отлично, спасибо. –