Perl скрипт убивается во время сна () - PullRequest
2 голосов
/ 15 июля 2010

У меня довольно простой Perl-скрипт, который в одной функции выполняет следующее:

    if ( legato_is_up() ) {
        write_log("INFO:        Legato is up and running. Continue the installation.");
        $wait_minutes = $WAITPERIOD + 1;
        $legato_up = 1;
    }
    else {
        my $towait = $WAITPERIOD - $wait_minutes;
        write_log("INFO:        Legato is not up yet. Waiting for another $towait minutes...");
        sleep 30;
        $wait_minutes = $wait_minutes + 0.5;
    }

По какой-то причине, иногда (например, 1 из 3 запусков) скрипт убивается. Я не знаю, кто несет ответственность за убийство, я просто знаю, что это происходит во время «сна».

Может кто-нибудь дать мне подсказку здесь? После того, как скрипт убит, его работа не завершена, что является большой проблемой.

Спасибо.

1 Ответ

1 голос
/ 15 июля 2010

Не зная, что еще работает в вашей системе, никто не догадывается.Вы можете добавить обработчик сигнала, но все, что он скажет вам, это какой сигнал (и когда), а не кто его отправил:

foreach my $signal (qw(INT PIPE HUP))
{
    my $old_handler = $SIG{$signal};
    $SIG{$signal} = sub {
        print time, ": ", $signal, " received!\n";
        $old_handler->(@_) if $old_handler;
    };
}

Вы также можете рассмотреть возможность добавления WARN и DIE.обработчик, если вы не регистрируете выходные данные из stderr.

...