Linuxマシンの電源が入っている限り実行するbashスクリプトがあります。以下に示すように開始します。
( /mnt/apps/start.sh 2>&1 | tee /tmp/nginx/debug_log.log ) &
起動後、ps出力にteeコマンドが次のように表示されます。
$ ps | grep tee
418 root 0:02 tee /tmp/nginx/debug_log.log
3557 root 0:00 grep tee
ログが特定のサイズに達すると、teeが生成するログのサイズを監視し、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
}
驚いたことに、teeコマンドを削除すると、start.shインスタンスも削除されます。どうしてこれなの?teeコマンドを終了し、start.shを実行し続けるにはどうすればよいですか?ありがとう。
tee -a
しtee
て追加モードでファイルを開くこともできます。そうしないと、teeはファイルを切り捨てた後、同じオフセットでファイルに書き込みを続けます(macOSのようにスパースファイルをサポートしないシステムではその位置までのファイルのセクションを再割り当てし、2倍のディスク容量を消費します)。