
継続的に更新されるtomcat catalina.logファイルがあります。
catalina.log_new
次の2時間の間に、最後の500行と追加のログを新しいファイルに保存したいと思います。
まず私は走るnohup tail -n 500 -F --retry catalina.log>>catalina.log_live
問題は、上記のtail
コマンドが(何らかの理由で)終了する可能性があることです。
次のロジックを試しましたが、わかりません。質問とは関係がないため、次の2時間実行する方法のロジックを作成していません。
nohup tail -n 500 -F --retry catalina.log>>catalina.log_live
while true
do
ps -ef | grep -v grep | grep tail | grep 500 | grep catalina.log
if [ $? -ne 0 ]; then
nohup tail -n 1 -F --retry catalina.log>>catalina.log_live
fi
sleep 5;
done
このアプローチが適しており、行方不明または重複した行は発生せず、最後の500行とcatalina.log
INTO以降の2時間以内に新しい着信行を収集するのに役立つかどうかをお勧めしますかcatalina.log_live
?
答え1
使用する必要がない場合、またはnohup
フォアグラウンドプロセスとして実行するだけです。ps
何らかの理由で終了すると、親シェルプロセスも終了し、再起動コマンドが役に立たなくなります。より良いアプローチは、この奇妙な目的のためのサービスを作成することです。tail
tail
#!/bin/sh
# catalina_log_new.sh
{
# sleep 2 hours, then kill parent process
sleep $((2 * 60 * 60))
kill $$
} &
# make sure alarm is killed when the script exits
_alarm_pid=$!
trap 'kill $_alarm_pid 2>/dev/null' EXIT
# first write last 500 lines
tail -n500 catalina.log > catalina.log_new
# then append new lines only
while true; do
tail -F -n0 catalina.log >> catalina.log_new
done
timeout $((2 * 60 * 60)) ./catalina_log_new.sh
または、2時間後も実行を続けている場合は、スクリプトを終了するバックグラウンドスリープモードを代わりに使用できます。