tail コマンドが終了しても、追加ログを別のファイルに保存してください。

tail コマンドが終了しても、追加ログを別のファイルに保存してください。

継続的に更新される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.logINTO以降の2時間以内に新しい着信行を収集​​するのに役立つかどうかをお勧めしますかcatalina.log_live

ベストアンサー1

使用する必要がない場合、またはnohupフォアグラウンドプロセスとして実行するだけです。ps何らかの理由で終了すると、親シェルプロセスも終了し、再起動コマンドが役に立たなくなります。より良いアプローチは、この奇妙な目的のためのサービスを作成することです。tailtail

#!/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時間後も実行を続けている場合は、スクリプトを終了するバックグラウンドスリープモードを代わりに使用できます。

おすすめ記事