加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl:运行“守护进程”并打印

发布时间:2020-12-15 23:21:44 所属栏目:大数据 来源:网络整理
导读:我正在运行一个全天候运行的脚本.它只是一遍又一遍地循环,非常简单: while ($daemon) { sleep 60; chomp(my $currentDate = `date +%c`); print LOG "-- Running trigger: $currentDate --n"; system("$triggerCmd $daemonLog"); print LOG "-- Completed
我正在运行一个全天候运行的脚本.它只是一遍又一遍地循环,非常简单:

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

它工作正常.问题是它不打印最后一行(“完成触发测试”),直到60秒睡眠后.它打印运行线,运行命令,打印命令输出,但在打印“完成”之前等待60秒,然后立即再次打印“运行”线.

所以它遵循的过程是这样的:
睡60秒
打印“运行触发器”
运行触发器,重定向输出
睡60秒
打印完成
打印运行
运行触发器

但我希望它能做到这一点:
睡60
打印“运行触发器”
运行触发器,重定向输出
打印“完成”
睡60

我已经尝试将sleep命令移动到循环结束,没有什么区别.虽然这看起来很小,但它实际上是我已经处理了一段时间的问题,它将解决一些问题来解决它.我正在使用反引号来运行命令并捕获输出,然后打印输出,但这导致了相同的行为.

解决方法

可能是LOG的输出被缓冲了.尝试

select LOG;
$| = 1;
select STDOUT;

要么

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

LOG初始化后.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读