2013-01-20 68 views
4

我试图使用Apache Commons守护程序守护程序使用Daemon接口。它自己的Java应用程序没有做任何事情,只是写入黑体。使用JSVC守护java应用程序

我编的jsvc:http://people.apache.org/~mturk/daemon-1.0.10/

(甚至试图最新版本:http://people.apache.org/~mturk/daemon-1.0.12/

,并写了这个基本的脚本。

do_exec() 
{ 
    $EXEC \ 
     -home "$JAVA_HOME" \ 
     -cp $CLASS_PATH \ 
     -outfile $LOG_OUT \ 
     -errfile $LOG_ERR \ 
     -pidfile $PID \ 
     $1 \ 
     $MAIN_CLASS 
    echo "result: $?" 
} 

case "$1" in 
    start) 
      do_exec 
      ;; 
    stop) 
      do_exec "-stop" 
      ;; 
    restart) 
      do_exec "-stop" 
      do_exec 
      ;; 
    *) 
      echo "usage: daemon {start|stop|restart}" >&2 
      exit 3 
      ;; 
esac 

现在,当我试图停止守护进程时,它没有运行我会得到响应码255 THAS太棒了。

但是当我尝试启动时,它已经在运行,我得到响应码0。但在我ERRFILE我找出守护:

Still running according to PID file /tmp/deamon.pid, PID is 1799 
Service exit with a return value of 122 
当我尝试在开始抛出异常

同样的事情()方法,并尝试启动守护进程,响应代码为0.但errfile:

Service exit with a return value of 5 

我在这里失踪了什么?我怎么能告诉用户stat deamon没有启动或者它已经在运行?

+0

这个脚本是一个windows批处理文件,是吗? – Coffee

回答

4

后仔细阅读JSVC是如何工作的:http://commons.apache.org/daemon/jsvc.html

我发现我在做什么错了,我必须使用等待参数

在使用-wait参数,启动进程等待,直到控制器显示“我准备好了”,否则在创建控制器进程后返回。

+1

确保您的start()方法在等待时间到期之前完成。否则,您将得到退出码1而不是0。 –