start-stop-daemon和java - 怎么做对了?

loo*_*une 8 java ubuntu

我正在尝试将java程序作为服务运行.我的要求是:

1)在机器启动时启动java程序

2)如果java程序崩溃重启

3)作为特殊用户在特殊目录中执行它

旁注:我不能假设这是唯一运行的java进程,并且意外地运行该服务两次将是危险的.

到目前为止,我已尝试使用start-stop-daemon实现它.但是,应用程序在崩溃时不会自动重新启动(即,以非零退出代码终止).我想它有事情要做,我需要使用--background,因此,start-stop-daemon无法确定退出代码?我对么?如何正确解决此问题?(我更喜欢只有系统功能的解决方案,由于安全限制,没有第三方工具会更容易)

我当前的脚本(正如同样的说法,Dummy是一个虚拟的java应用程序,它永远在睡觉)

#!/bin/sh
### BEGIN INIT INFO
# Provides:          CI Master
# Required-Start:    $all
# Required-Stop:     $all
# Should-Start:      $portmap
# Should-Stop:       $portmap
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# X-Interactive:     false
# Short-Description: CI Master
# Description:       CI Master
### END INIT INFO

SERVICE_NAME="CI Master"
PIDFILE=/var/run/CI_master.pid
USER=ci
DIRECTORY=./master/
EXECUTABLE=/usr/bin/java
ARGUMENTS="Dummy"

. /lib/lsb/init-functions

case "$1" in
start)
    log_daemon_msg "Starting $SERVICE_NAME" "$SERVICE_NAME"
    start-stop-daemon --pidfile $PIDFILE --make-pidfile --background --chuid $USER --chdir /home/$USER/$DIRECTORY/ --startas $EXECUTABLE --start -- $ARGUMENTS
    log_daemon_msg "$SERVICE_NAME started" "$SERVICE_NAME"
;;
stop)
    log_daemon_msg "Stopping $SERVICE_NAME" "$SERVICE_NAME"
    start-stop-daemon --pidfile $PIDFILE --remove-pidfile --stop
    log_daemon_msg "$SERVICE_NAME stopped" "$SERVICE_NAME"
;;
restart|reload|force-reload)
    $0 stop
    sleep 1
    $0 start
;;
status)
    start-stop-daemon --pidfile $PIDFILE --status
    case $! in
        0)
            log_daemon_msg "$SERVICE_NAME is running" "$SERVICE_NAME"
        ;;
        1)
            log_daemon_msg "$SERVICE_NAME is not running (pid file exists)" "$SERVICE_NAME"
        ;;
        2)
            log_daemon_msg "$SERVICE_NAME is not running" "$SERVICE_NAME"
        ;;
        3)
            log_daemon_msg "unable to determine status of $SERVICE_NAME" "$SERVICE_NAME"
        ;;
    esac
;;
esac
exit 0
Run Code Online (Sandbox Code Playgroud)

提前致谢!

小智 2

我建议 DaemonTools + service/chkconfig。

DaemonTools 可能已经安装在您的平台上,或者您可以尝试 apt-get。最多 5 秒内它将自动重新启动您的守护程序。

您可以查阅 linux 用户手册 8 以获取有关 service/chkconfig 的更多信息。

希望这有帮助。