FreeBSD - 将 .jar 作为守护进程运行,服务 XX 状态返回“未运行”

FreeBSD - 将 .jar 作为守护进程运行,服务 XX 状态返回“未运行”

我想在 FreeBSD 11.0-RELEASE-p8 上运行一个 jar 作为守护进程。这是我拥有的服务文件:

!/bin/sh

## Service for the camp web site.

# PROVIDE: tabor-web
# REQUIRE: SERVERS mysql-server nginx

#
# Add the following line to /etc/rc.conf to enable camp web site:
# taborweb_enable (bool): Set to "NO" by default.
#           Set to "YES" to enable camp web site.
#

. /etc/rc.subr

name="taborweb"
rcvar=taborweb_enable
pidfile="/var/run/${name}.pid"
logfile="/var/log/${name}.log"
taborweb_chdir="/usr/local/tabor-web"

#command="/usr/local/bin/java" #no, try daemon

command="/usr/sbin/daemon"
start_precmd="${name}_prestart"
procname="java"

load_rc_config $name
: ${taborweb_enable:=no}

taborweb_prestart() {

    # set the daemon / java flags
    rc_flags="-f -p ${pidfile} /usr/local/bin/java -jar ./tabor-web.jar >> ${logfile} 2>&1 ${rc_flags}"

    touch $pidfile
}

taborweb_describe() {
    echo "Service for running a camp web site."
}


run_rc_command "$1"

守护进程确实在开始时使用正确的 PID 创建了一个 PID 文件,但是当我尝试运行时

service tabor-web status

我得到回应

taborweb is not running.

当我检查它时

# ps -aux | grep java

我可以看到它正在运行(并且网络服务可以访问)。

 root  2654   0.0  0.2   10428   2132  -  Is   17:12    0:00.00 daemon: /usr/local/bin/java[2655] (daemon)
 root  2655   0.0 17.1 1707364 172744  -  I    17:12    0:20.07 /usr/local/openjdk8-jre/bin/java -jar ./tabor-web.jar
 root  2943   0.0  0.0     404    316  0  R+   17:45    0:00.00 grep java

cat /var/run/taborweb.pid

节目

2655

这对于自动观看来说当然不太好——即使网站打开了,看起来也像是挂了。好消息是守护程序按预期运行(如果我终止它,它会重新启动 Web 服务)。

但是我在脚本中缺少什么来显示正确的服务状态呢?

答案1

好吧,我发现了一个简单的错误。该服务正在寻找 java 服务的 PID 文件。但它应该一直在寻找守护进程的 PID 文件。

pidfile_child="/var/run/${name}.pid"
pidfile="/var/run/${name}_daemon.pid"

进而

rc_flags="-r -P ${pidfile} -p ${pidfile_child} /usr/local/bin/java -jar ./tabor-web.jar >> /var/log/taborweb.log 2>&1 ${rc_flags}"

现在它按预期工作了。

相关内容