Linuxシステムの電源が入るたびに実行されるbashスクリプトがあります。私は次のように始めます。
( /mnt/apps/start.sh 2>&1 | tee /tmp/nginx/debug_log.log ) &
起動後、私のウィンドウでteeコマンドを見ることができます。メモ出力は以下の通りです。
$ ps | grep tee
418 root 0:02 tee /tmp/nginx/debug_log.log
3557 root 0:00 grep tee
ログサイズを監視する機能がありますティー散乱して殺すティーログが特定のサイズに達したら、次のコマンドを実行します。
monitor_debug_log_size() {
## Monitor the file size of the debug log to make sure it does not get too big
while true; do
cecho r "CHECKING DEBUG LOG SIZE... "
debugLogSizeBytes=$(stat -c%s "/tmp/nginx/debug_log.log")
cecho r "DEBUG LOG SIZE: $debugLogSizeBytes"
if [ $((debugLogSizeBytes)) -gt 100000 ]; then
cecho r "DEBUG LOG HAS GROWN TO LARGE... "
sleep 3
#rm -rf /tmp/nginx/debug_log.log 1>/dev/null 2>/dev/null
kill -9 `pgrep -f tee`
fi
sleep 30
done
}
驚くべきことに殺されたティーコマンドはstart.shインスタンスを介しても終了します。なぜこれですか?どうやって終了できますか?ティーコマンドを実行しましたが、start.shはまだ実行されますか?ありがとうございます。
ベストアンサー1
終了すると、tee
指定されたコマンドは、より多くの出力書き込みを試みるまで実行され続けます。その後、リーダーがないパイプに書き込もうとすると、SIGPIPE(ほとんどのシステムでは13個)が受信されます。
SIGPIPEをキャプチャするようにスクリプトを変更し、適切なアクション(出力の書き込みを停止するなど)を行うと、ティーが終了した後も続行できます。
殺すよりも良いtee
それでも、logrotate
単純化のためにoptionsと一緒に使用されますcopytruncate
。
見積もりlogrotate(8)
:
copytruncate
古いログファイルを移動して新しいログファイルを作成することを選択する代わりに、コピーを作成してから元のログファイルを切り捨てます。一部のプログラムでログファイルを閉じるように指示できないため、古いログファイルに永続的に書き込む(追加)できる場合に使用できます。ファイルのコピーとトリミングの間の時間間隔は非常に短いため、一部のロギングデータが失われる可能性があります。このオプションを使用すると、古いログファイルはそのまま残り、作成オプションは適用されません。