Я пытаюсь написать Perl-скрипт для захвата вывода системного журнала, пока цикл запускает системную команду через определенные промежутки времени. Я хочу, чтобы скрипт выполнял действие, аналогичное тому, что я часто делаю в командной строке (unix): получение дампов потоков процесса Java путем включения /var/log/jbossas/default/console.log
в новый файл в фоновом режиме и одновременное выполнение kill -QUIT [PID]
произвольное число интервалы, на переднем плане. Мне не нужно проверять или обрабатывать вывод файла журнала, пока он хвост, я просто хочу, чтобы он переходил к новому файлу во время выполнения моего цикла; как только цикл завершится, фоновая задача также должна выйти.
# basic loop
# $process is PID given as argument
my $duration = 6;
my $dumps = 0;
until ($dumps == $duration) {
system "kill -QUIT $process";
$dumps++;
print STDOUT "$dumps of $duration thread dumps sent to log.\n";
print STDOUT "sleeping for $frequency seconds\n";
sleep 30;
}
Каким-то образом мне нужно обернуть этот цикл в другой цикл, который будет знать, когда он выйдет, а затем выйти из задачи хвостовой обработки фонового журнала. Я понимаю, что это должно быть тривиально в Perl, но я не уверен, как поступить, и другие вопросы или примеры, которые я нашел, не совсем соответствуют тому, что я пытаюсь сделать здесь. Похоже, использование Perl system
блокирует мой переход во внутренний цикл; exec
разветвляется с заданием на хвост, так что я не уверен, как выйти из него после выполнения внутреннего цикла. Я бы предпочел использовать только основные модули Perl, а не File :: Tail или какие-либо дополнительные модули CPAN.
Заранее благодарен за любые отзывы, и не стесняйтесь издеваться над моим Perlessness. Я искал похожие вопросы, на которые здесь даны ответы, но если я пропустил тот, который, кажется, решает мою проблему, я был бы признателен, если бы вы связали меня с ним.