Perl Daemon не работает со сном () - PullRequest
2 голосов
/ 22 июня 2011

Я написал простой тестовый демон, используя Proc :: Daemon . Вот этот демон:

 #!/usr/bin/perl

 use Proc::Daemon;

 $daemon = Proc::Daemon->new(
        work_dir     => '/scripts/',
        child_STDOUT => '/scripts/child.log',
        child_STDERR => '+>>debugchild.txt',
        pid_file     => 'pid.txt',
        exec_command => 'perl /scripts/test.pl'
    );


foreach(@ARGV)
{
if ( /install/i )
{
    $Kid_1_PID = $daemon->Init;
}
elsif (/remove/i)
{
    $stopped = $daemon->Kill_Daemon();
}
}

А вот тест, который он выполняет:

#!/usr/local/bin/perl

while (1) {

print "test\n";
sleep(1);
}

Цикл while работает нормально только с оператором print, но когда я добавляю sleep (); журнал пуст. С чего бы это?

Ответы [ 2 ]

5 голосов
/ 22 июня 2011

Perl не будет автоматически очищать буфер, поэтому ваша запись в файл будет происходить только через некоторое время. Когда вы не спите, ваш буфер почти автоматически очищается из-за объема записываемых данных.

Попробуйте это:

$| = 1;
while (1) {
    print "test\n";
    sleep(1);
}
4 голосов
/ 22 июня 2011

Буферизация вывода и не хватает терпения? С sleep(1) в цикле может потребоваться некоторое время для накопления достаточного количества данных и их сброса в файл журнала.

Поместите оператор $|=1; в начало вашего скрипта.

...