Perl: запуск "Демона" и печать - PullRequest
4 голосов
/ 28 октября 2010

Я запускаю скрипт, который работает 24/7.Он просто повторяется снова и снова, очень просто:

while ($daemon) {
    sleep 60; 
    chomp(my $currentDate = `date +%c`);
    print LOG "-- Running trigger: $currentDate --\n";
        system("$triggerCmd >> $daemonLog");
        print LOG "-- Completed trigger test. --\n\n";
}

Работает отлично.Проблема в том, что он не печатает последнюю строку («Завершенный тестовый запуск»), пока ПОСЛЕ 60-секундного сна.Он печатает бегущую строку, запускает команду, печатает вывод команды, но затем ждет 60 секунд, прежде чем печатать «выполнено», и снова мгновенно печатает «бегущую» строку.

Таким образом, следующий процесс:
60 секунд сна
печать "запускающего триггера"
запуск триггера, вывод перенаправления
ожидания 60 секунд
печать завершена
печать выполняется
триггер запуска

Но я хочу сделать это:
сон 60
печать "запускающего триггера"
запуск триггера, перенаправление вывода
печать "выполнено"
сон 60

Я пытался переместить команду сна в конец цикла, но ничего не изменилось.Хотя это кажется очень незначительным, на самом деле это проблема, с которой я некоторое время сталкивался, и это решило бы несколько проблем, чтобы ее исправить.Я недавно использовал backticks для запуска команды и захвата вывода, а затем распечатки вывода, но это привело к тому же поведению.

1 Ответ

9 голосов
/ 29 октября 2010

Возможно, вывод на LOG буферизуется.Попробуйте

select LOG;
$| = 1;
select STDOUT;

или

use IO::Handle;
(*LOG)->autoflush(1);

после инициализации LOG.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...