我正在尝试将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 的更多信息。
希望这有帮助。
| 归档时间: |
|
| 查看次数: |
1701 次 |
| 最近记录: |