Linuxオペレーティングシステム(特にOracle LinuxおよびRHEL)で実行するようにWebLogic Serverブレークスレッド警告スクリプトを編集しようとしています。
オンラインでさまざまなスクリプトを見て、以下のように一部編集して準備しました。
私の目標は、つまっているスレッドの総数を見つけて、jstack
この数が0より大きい場合は、各Javaプロセスに対してそれぞれかかったスレッドの詳細(ホスティングサーバー名を含む)を含む電子メールを送信することです。中断されたスレッドがない場合は、OKAY
ファイルに書き込み、スクリプトが再実行されるのを待ちます。
checkstucklog=/home/weblogic/lastStuckCheck.log
DATE=`date +"%Y_%m_%d %H:%M:%S"`
#count="$(ps -ef | grep Dweblogic | cut -c 10-15 | tr -d ' ' | xargs jstack -F | tee /home/weblogic/msALL_stuck.log_`/usr/bin/date +\%m-\%d-\%y-\%H-\%M` | grep STUCK | wc -l)"
count="$(ps -ef | grep Dweblogic | cut -c 10-15 | tr -d ' ' | xargs jstack -F -l | tee /home/weblogic/msALL_stuck_$DATE.log | grep STUCK | wc -l)"
if [ $count > 0 ]
then
echo "\n Server has stuck threads" `/usr/bin/date +\%m-\%d-\%y-\%H-\%M` | mail -s 'STUCK thread on server' your_mail_address@mail_address.com > $Sfile
else
echo "\n Stuck Thread Status = OKAY" > $checkstucklog
fi
exit
しかし、私はbashスクリプトに少し弱いです。次のスクリプトが機能するのに役立ちますか?
- 私はスクリプトを正しい方法で書いていますか?
- Tシャツの代わりに他の代替品を製造できますか?
まだ中断されたスレッドがないため、このスクリプトの機能を確認できません。しかし、私はこれがうまくいかないと思います。オペレーティングシステムのプロセス内では、ホスティングサーバー名を印刷する方法が見つかりません。
答え1
もう一度考えてみるべきことをいくつかお知らせします。
待ち行列:
count="$(ps -ef | grep Dweblogic | cut -c 10-15 | tr -d ' ' | xargs jstack -F -l | tee /home/weblogic/msALL_stuck_$DATE.log | grep STUCK | wc -l)"
DATE
内部にスペースがある変数を使用してください。 (空白の代わりに別の文字を使用して)このように生成する方が良いでしょう。
DATE=`date +"%Y_%m_%d_%H:%M:%S"`
一部を削除するためにコマンドを再作成することもできますawk
。
count="$(ps -ef | awk '/Dweblogic/ {print $2}' | xargs jstack -F -l | tee /home/weblogic/msALL_stuck_$DATE.log | grep STUCK | wc -l)"
jstack
コマンドについて:Weblogicを使用するときは、Oracle java(同じ会社の製品)を使用するのが賢明です。 Oracle Javaにはjstack
そのようなオプションはありません-F
。
私はOracle Javaが商用製品であることを知っていますが、私が覚えている限り、Oracle製品(この場合はWebLogic)を使用してJavaを無料で使用できます。ただし、この場合は法務部に連絡するのが最善です(ライセンス契約の確認)。
数値を比較するときにbash
推奨される形式は次のとおりです。
if [ "$count" -gt 0 ]
良い方法は、変数を二重引用符で囲むことです。特に、変数が動的に生成される場合はさらにそうです。