我正在使用本地编译的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以外的东西(它似乎只对启动或杀死守护进程有用)?