Shell-Script
長時間執行的腳本停止將輸出發送到文件
我有一個腳本,用於以 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 塊是否沒有定期寫入日誌文件。