簡體   English   中英

Perl腳本日志到文件,輸出滯后

[英]Perl script log to file, output lag

我有一個Perlscript,它會執行一些日志文件解析,有時會執行bash命令:

$messagePath = `ls -t -d -1 $dir | head -n 5 | xargs grep -l "$messageSearchString"\`;

我像這樣./perlscript.pl > logfile.log啟動我的perl腳本。

現在,我在日志文件上添加了一條尾巴以查看進度,但是每次在上述行中,輸出都會被卡住。 輸出將在那里停止幾秒鍾,然后繼續。 ???

為了解決這個問題,我像這樣包裝它:

print `date`;
$messagePath = `ls -t -d -1 $dir | head -n 5 | xargs grep -l "$messageSearchString"`;
print `date`;

輸出顯示該命令不會花費很多時間:

So 6. Okt 22:35:04 CEST 2013
So 6. Okt 22:35:04 CEST 2013

如果我運行腳本時未將輸出重定向到文件,則沒有LAG。

知道為什么嗎?

我沒有嘗試重復您的行為,但這可能是標准輸出緩沖問題。 嘗試:

$| = 1;
$messagePath = `ls -t -d -1 $dir | head -n 5 | xargs grep -l "$messageSearchString"`;

更新資料

試圖復制你觀察到的行為:我不得不作出一些假設,但我相信我的懷疑是正確的。 這是管道,但這與重定向到文件並尾隨該文件相同:

./test.pl |  awk '{ print strftime("%Y-%m-%d %H:%M:%S"), $0; }'

沒有$| = 1 $| = 1 ,輸出經過緩沖和匯總:

2013-10-06 23:08:27 Saluton, mondo: /home/lserni/test.sh
2013-10-06 23:08:27
2013-10-06 23:08:27 Waiting 10s...
2013-10-06 23:08:27 Saluton denove!

進行修改后,將在生成時打印每行:

2013-10-06 23:09:09 Saluton, mondo: /home/lserni/test.sh
2013-10-06 23:09:09
2013-10-06 23:09:09 Waiting 10s...
2013-10-06 23:09:19 Saluton denove!

我希望你的腳本是做一些需要幾秒鍾,而這是生成messagePath ; 並且輸出將被延遲,直到Perl有大量數據要發送,給人的感覺是那條線停滯了。

我忘了:計時管是從這里來的

在像您這樣的情況下,使用unbuffer命令已經取得了一些成功。 它在環境中運行命令,該環境看起來像該命令輸出到tty一樣,因此它不會緩沖其輸出。 我不知道如何在您的情況下正確使用它,因此,如果要嘗試使用它,則必須進行一些試驗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM