ネイティブにコンパイルされたjsvcを使用してJavaデーモンを起動しています。私はこれをopenSUSE32ビットVMで実行しています。このコードはApacheのデーモンインターフェイスを実装しており、次のコマンドでデーモンを実行しています。
./jsvc -home jre -errfile logs/jsvc.err -pidfile daemon.pid -cp <my_classpath> com.loader.loaderservice.LoaderDaemon
起動して問題なく動作します。通常のユーザーおよびrootとしてデーモンを起動できます。ただし、デーモンを終了しようとすると、jsvcは停止コマンドを発行するのではなく、プロセスを強制終了します。
./jsvc -stop -home jre -outfile logs/jsvc.err -errfile logs/jsvc.err -pidfile daemon.pid -cp <my_classpath> com.loader.loaderservice.LoaderDaemon
デーモンプロセスは終了しますが、シャットダウン手順は実行されません(たとえば、ログに記録したり、データベースにレコードをマークしたりする必要があります)。logs / jsvc.errファイルに次の情報が含まれていますが、他のログは書き込まれません。
Service exit with return value 143
エラーをグーグルで調べた後、同じことを見た人が数人いますが、適切な解決策を見つけることができません(http://mail-archives.apache.org/mod_mbox/commons-dev/200401)。 mbox /%3CPine.GSO.3.96.1040105133739.23375A-100000 @ merlot.tel.uva.es%3E、http://www.tek-tips.com/viewthread.cfm?qid = 1014679 、http ://threebit。 net / mail-archive / tomcat-users / msg03832.html)。
更新: Apacheのウィンドウのサービスランチャー(procrun)を使用すると、問題なくサービスを開始および停止できます。この問題は、jsvcにのみ関連しており、デーモンの停止にのみ関係しているようです。
更新2:http ://commons.apache.org/daemon/jsvc.html#Starting_jsvcを注意深く 読んだ後、使用している停止タグが、指定したpidファイルを介してプロセスにkillコマンドを発行していることに気付きました。jsvcは、設計上、デーモンを実際には正常に停止しないようです。これは、非常に冗長なstopメソッドがメッセージを書き出さないため、私が見ている動作と一致しています。
-stop stop the service using the file given in the -pidfile option
新しい質問:
- JavaメインがApacheデーモンインターフェイスを実装している場合、実行中のデーモンで「停止」を発行するにはどうすればよいですか?
- jsvc以外のものが必要ですか(デーモンの起動または強制終了にのみ役立つようです)?