2013-12-10 105 views
1

我有一個需要作爲守護程序運行的perl腳本。 我在shell腳本設置一些環境變量,並呼籲從那裏PERL無法將stdout和stderr重定向到輸出文件

繼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

任何線索

+7

緩衝? '$ | = 1;' – toolic

+0

即使當我殺死(-TERM)它不會打印它..我會嘗試$ | = 1; – JRK

+1

'STDOUT->沖洗' – Borodin

回答

7

Suffering from Buffering?

如果是這樣,則數據將最終出現在日誌文件(除非該程序是殺死),但是您可以通過將以下內容添加到Perl代碼的頂部使其更快顯示:

$| = 1; 

特殊變量$|(也稱爲$OUTPUT_AUTOFLUSH)將在每次寫入時強制輸出刷新(如果其值不爲零)。按照鏈接查看如何設置每個文件句柄的自動刷新。

相關問題