2009-04-14 10 views
0

webappを実行しているjbossアプリケーションサーバーがあります。 UIのどこかに「再起動」ボタンを実装して、アプリケーションサーバー全体を再起動する必要があります。私たちの素朴な実装は、/etc/init.dスクリプトをrestartコマンドで呼び出すことでした。これにより、アプリケーションサーバーがシャットダウンされてから再起動されます。Javaがsolarisでjavaを再起動するスクリプトを呼び出せますか?

しかし、Javaプロセスがシャットダウンすると、再起動スクリプトを実行している子プロセスも終了してから、アプリケーションサーバーを再起動するスクリプト内のポイントに到達するように見えます。

スクリプトを呼び出す場所に '&'を追加する方法を試しましたが、それは役に立たなかったです。スクリプトを実行する場所はありますか?

+0

別の方法として、アプリケーションサーバーが停止したときにアプリケーションサーバーを再起動するようにinit.dを設定する方法があります。その後、JVMをシャットダウンして、SolarisにJVMを再起動させるだけです。 –

答えて

1

nohupコマンドを使用して、Javaで実行するスクリプト内から何かを実行してみてください。あなたが標準入力、標準出力、または標準エラー出力を持っていないことを確認し、また

nohup /etc/init.d/myservice restart 

/etc/init.d/myservice restart 

これを行うには、それを変更する:あなたは、Javaから実行するスクリプトは現在、これが実行されている場合つまり、 Javaプロセスによってインターセプトされます。潜在的に問題を引き起こす可能性があります。したがって、多分(bashやshのを想定して)これを試してみてください。

トラップを使用して信号を無視するように再起動スクリプトで、あなたのシグナルハンドラを設定し
nohup /etc/init.d/myservice restart >/dev/null 2>&1 
+0

それはおそらく一部のケースでは動作しますが、残念なことに私たちのものではありません。私たちのサーバープロセス自体はnohupで開始されました。したがって、SIGINTまたはSIGTERMを送信する必要があります。そしてそれらはnohupにもかかわらずrestartスクリプトに伝播します。それはキャッチ22です。 –

0

trap "" 2 # ignore SIGINT 
trap "" 15 # ignore SIGTERM 

これを実行した後、あなたがする必要があります必要に応じて、おそらくSIGKILLを使って再起動スクリプトを終了してください。

関連する問題