PERL无法将stdout和stderr重定向到输出文件

时间:2013-12-10 18:54:20

标签: perl

我有一个需要作为守护进程运行的perl脚本。 我在shell脚本中设置了一些环境变量,并从那里调用perl脚本

以下是perl脚本的简化版本:

#!/usr/bin/env perl
do {

    print "HELLO";
    print "TO";
    print "HELL";
    #sleep (10);
} while (1)

以下是我的shell脚本的简化版本:

#!/usr/bin/ksh

DATE=`date +'%Y%m%d'`
TIME=`date +'%H%M%S'`
PID=$$
tmp_log_file=${PID}_${DATE}_${TIME}.log
abcd.pl >>$tmp_log_file &

如果我从perl注释掉睡眠函数调用它可以正常工作。但是当我取消注释它时,tmp_log_file被创建为零字节。

Perl版本:v5.10.0

KSH版本:version sh (AT&T Research) 93t+ 2010-02-02

任何线索

1 个答案:

答案 0 :(得分:7)

你是Suffering from Buffering?

吗?

如果是这样,数据最终将出现在日志文件中(除非该程序被终止),但您可以通过在Perl代码的顶部添加以下内容来使其更快出现:

$| = 1;

如果值为非零,则特殊变量$|(也称为$OUTPUT_AUTOFLUSH)将强制每次写入时刷新输出。点击链接查看如何设置每个文件句柄的autoflush。

相关问题