使用JSVC守护Java应用程序

use*_*220 5 java jsvc apache-commons-daemon

我正在尝试使用Apache Commons Daemon使用Daemon接口来守护我的应用程序.它自己的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
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试在守护程序未运行时停止守护程序时,我会得到响应代码255.真是棒极了.

但是当我尝试启动守护进程时它已经运行我得到响应代码0.但在我的错误文件中我发现:

Still running according to PID file /tmp/deamon.pid, PID is 1799
Service exit with a return value of 122
Run Code Online (Sandbox Code Playgroud)

当我尝试在start()方法中抛出异常并尝试启动守护进程时,响应代码为0.但是错误文件:

 Service exit with a return value of 5
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么?如何告知用户stat deamon没有启动或者它已经运行?

use*_*220 6

仔细阅读JSVC的工作原理后:http://commons.apache.org/daemon/jsvc.html

我发现我做错了什么,我必须使用wait参数

当使用-wait参数时,启动程序进程将等待,直到控制器显示"我准备好",否则在创建控制器进程后返回.

  • 确保您的 start() 方法在 -wait 时间到期之前完成。否则,您将获得退出代码 1 而不是 0。 (2认同)