【问题标题】:Daemonizing java application with JSVC使用 JSVC 守护 Java 应用程序
【发布时间】:2013-01-20 15:06:18
【问题描述】:

我正在尝试使用 Apache Commons Daemon 使用 Daemon 界面来守护我的应用程序。 Java 应用程序本身并没有做任何事情,只是写给 stout。

我编译了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。太棒了。

但是当我尝试启动已经运行的守护进程时,我得到响应代码 0。但在我的 errfile 中我发现:

Still running according to PID file /tmp/deamon.pid, PID is 1799
Service exit with a return value of 122

当我尝试在 start() 方法中抛出异常并尝试启动守护程序时,同样的事情,响应代码为 0。但是 errfile:

 Service exit with a return value of 5

我在这里缺少什么?如何通知用户 stat 守护程序未启动或已在运行?

【问题讨论】:

  • 这个脚本是windows批处理文件吧?

标签: java jsvc apache-commons-daemon


【解决方案1】:

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

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

当使用-wait参数时,launcher进程一直等待,直到控制器说“我准备好了”,否则在创建控制器进程后返回。

【讨论】:

  • 确保您的 start() 方法在 -wait 时间到期之前完成。否则你会得到退出代码 1 而不是 0。
猜你喜欢
  • 1970-01-01
  • 2011-12-02
  • 1970-01-01
  • 1970-01-01
  • 2012-08-19
  • 1970-01-01
  • 1970-01-01
  • 2015-06-08
  • 1970-01-01
相关资源
最近更新 更多