長期実行スクリプトが出力をファイルに送信するのを停止します。

長期実行スクリプトが出力をファイルに送信するのを停止します。

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 scriptname を実行すると表示されますが、ログファイルは更新されません。出力転送が停止するのはなぜですか?バッファの問題ですか?

ベストアンサー1

ファイルgzip形式には、CRC-32チェックサムと圧縮されていないデータ長を含む8バイトフッターがあります。これ圧縮ファイル形式ブロック指向です。パイプラインのプログラムは、gzip次の出力ブロックで使用するために入力をほぼ確実にバッファリングします。 8バイトのフッターは、長期実行シェルスクリプトが終了しgzipてstdinが閉じられるまで記録されません。 DEFLATEブロックがログファイルに定期的に書き込まれないことを確認するには、長い時間を待つ必要があるようです。

おすすめ記事