我正在使用本地編譯的jsvc來啓動java守護進程。我在openSUSE 32位虛擬機上運行它。該代碼實現了Apache的守護進程接口,並使用以下命令執行deamon。Apache jsvc無法停止守護進程
./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
守護進程死亡,但不執行任何其關閉步驟(例如,它應該登錄,標誌着一個數據庫中的記錄,等等)。我得到的日誌/ jsvc.err文件中的以下內容,不寫任何其他日誌:
Service exit with return value 143
谷歌搜索的錯誤後,我看到的極少數人誰都已經看到了同樣的事情,但是我找不到一個好的解決方案(http://mail-archives.apache.org/mod_mbox/commons-dev/200401.mbox/%[email protected]。 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後,我注意到,停止標籤我使用的問題kill命令PN通過我指定PID文件的過程。看起來jsvc實際上並沒有按照設計優雅地停止守護進程。這與我看到的行爲一致,因爲非常詳細的停止方法不會寫出任何消息。
-stop stop the service using the file given in the -pidfile option
新問題:
- 如果我的Java主已經實現了Apache的守護程序接口,我怎麼發佈有關運行的守護一個「停」?
- 我是否需要jsvc以外的東西(它似乎只對啓動或殺死守護進程有用)?