gpt4 book ai didi

java - start-stop-daemon 和 java - 如何正确执行?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:54:31 26 4
gpt4 key购买 nike

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

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

2)java程序崩溃重启

3)以特殊用户身份在特殊目录下执行

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

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

我当前的脚本(Dummy,正如所说,是一个永远 hibernate 的虚拟 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

提前致谢!

最佳答案

我建议使用 DaemonTools + service/chkconfig。

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

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

希望这对您有所帮助。

关于java - start-stop-daemon 和 java - 如何正确执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30243477/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com