繁体   English   中英

Perl:在循环中运行另一个系统命令时在后台尾文件

[英]Perl: tail file in background while running another system command in loop

我试图编写一个Perl脚本来捕获系统日志输出,而循环则每隔一段时间运行一次系统命令。 我希望脚本执行与我在(unix)命令行上经常执行的操作等效的操作:通过在运行时在后台将/var/log/jbossas/default/console.log尾随到新文件中来获取Java进程线程转储。在前台每隔一定时间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分叉了tail作业,所以我不确定内部循环运行后如何退出它。 我强烈希望仅使用核心Perl模块,而不要使用File :: Tail或任何其他CPAN模块。
在此先感谢您提供任何反馈意见,并随时嘲笑我的无穷。 我一直在寻找在这里回答的类似问题,但是如果我错过了一个似乎可以解决我的问题的问题,那么感谢您与我联系。

这可能最适合事件循环。 阅读有关使Perl守护程序运行24/7并从命名管道读取的答案,这将为您提供有关在事件循环中读取文件句柄的介绍。 只需打开尾部输出的管道,将其打印到文件,在计时器事件上运行kill命令,然后一旦计时器事件完成就发出退出信号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM