
誰か私に光を当てて、正しい方向を指し示してくれませんか?
Tomcat アプリの起動中にログ内の例外をチェックする bash スクリプトを作成したいと考えています。このスクリプトは、おそらく を介して、新しいファイルの作成をその場で検出できる必要がありますinotify
。
Exception:
このスクリプトは、ログ ファイル内の新しい行がないかログ ディレクトリを継続的にチェックし、または という単語を含む行を に書き込む必要がありERROR
ます/var/log/errorcheckernotifier.txt
。
スクリプトがこの行を検出すると、起動中に検出された例外の数を書き込むINFO: Server startup in
必要があります。TOMCAT IS STARTED
/var/log/errorcheckernotifier.txt
このスクリプトは の内容を上書きしませんerrorcheckernotifier.txt
。代わりに追加します。
このスクリプトを実行し続け、さらに起動を検出したり、例外をカウントしたりするにはどうすればよいですか。
答え1
役に立つなら、Tomcat の init スクリプトの「開始」部分をお渡しできます。
始める) echo -n "$FOO_BASE_JM を起動しています " ## startproc(8)でデーモンを起動します。これが失敗した場合は ## 戻り値は startproc によって適切に設定されます。 ps -efwwwwwwwwwwwwwww | grep java | grep -q "$FOO_BASE_JM"; の場合 echo "プロセス $FOO_BASE_JM はすでに存在します" 失敗 1 それ以外 ログライン=$(cat /opt/$FOO_BASE_JM/logs/catalina.out | wc -l) CATALINA_OPTSをエクスポートする ########/sbin/startproc $FOO_BIN [ "$(id -un)" = "tomcat" ] の場合; $FOO_BIN 開始 || rc_failed 1 それ以外 /bin/su tomcat $FOO_BIN 開始 || rc_failed 1 フィ echo -n "プロセスが表示されるのを待っています。" 重量=0 プロセスを見る=true while ! ps -efwwwwwwwwwwwwwww | grep java | grep -q "$FOO_BASE_JM"; 実行する 睡眠2 エコー -n 。 重量=$(($重量+1)) [ "$wt" -gt 30 ]の場合; エコー echo "タイムアウト: プロセスを確認できません。ログを確認してください。" 失敗 1 プロセス_seen=false 壊す フィ 終わり [ "x$process_seen" = "xtrue" ]の場合; エコー echo -n "起動を待機しています。" 重量=0 while ! tail +$LOGLINES /opt/$FOO_BASE_JM/logs/catalina.out | grep -q "INFO: Server startup"; 実行 睡眠2 エコー -n 。 重量=$(($重量+1)) [ "$wt" -gt 30 ]の場合; エコー echo "タイムアウト: ログにサーバーの起動成功の兆候が見つかりません。確認してください。" 失敗 1 壊す フィ 終わり tail +$LOGLINES /opt/$FOO_BASE_JM/logs/catalina.out | grep -q "INFO: サーバーの起動" && tail +$LOGLINES /opt/$FO O_BASE_JM/logs/catalina.out | grep "INFO: サーバーの起動" フィ fi # プロセスが存在しない場合 # ステータスを記憶し、詳細に表示する rc_status -v ;;
代替案として、Nagios のような監視ツールを使用し、ログ監視プラグインの 1 つを catalina.out ファイル (またはログ記録先) に指定して、新しいエラー文字列や興味のあるものを検索することを提案できます。Oracle DB では、これは完璧に機能します。