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

时间:2010-10-28 19:57:04

标签: perl loops

我正在运行一个全天候运行的脚本。它只是一遍又一遍地循环,非常简单:

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

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

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

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

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

1 个答案:

答案 0 :(得分:9)

可能正在缓存LOG的输出。尝试

select LOG;
$| = 1;
select STDOUT;

use IO::Handle;
(*LOG)->autoflush(1);
LOG初始化后