Shell-Script

長時間執行的腳本停止將輸出發送到文件

  • July 3, 2016

我有一個腳本,用於以 10 秒的間隔擷取伺服器的某些狀態。

腳本如下:

for (( ; ; ))
do
   /usr/local/apache/bin/apachectl fullstatus
   sleep 10
done

我正在使用以下命令執行腳本:

nohup /path/to/scriptname.sh | gzip > logfile.log.gz &

如果我與 ssh 斷開連接,它將在後台執行並繼續執行。但是,大約 3-4 小時後,輸出停止傳輸到日誌文件。如果我執行 ps -elf | 腳本仍在執行並顯示出來 grep 腳本名,但日誌文件不更新。為什麼輸出停止發送?這可能是緩衝區的問題嗎?

gzip文件格式有一個 8 字節的頁腳,其中包含 CRC-32 校驗和和未壓縮的數據長度。DEFLATE 文件格式是面向塊的。管道中的gzip程序幾乎肯定會緩衝輸入以在下一個輸出塊中使用。gzip直到長時間執行的 shell 腳本退出並且’s 的標準輸入關閉後,才會寫入 8 字節的頁腳。我認為您必須等待很長時間才能查看 DEFLATE 塊是否沒有定期寫入日誌文件。

引用自:https://unix.stackexchange.com/questions/255377