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

이는 확실히 자동화된 보기에는 좋지 않습니다. 사이트가 열리더라도 다운된 것처럼 보입니다. 좋은 소식은 데몬이 예상대로 실행된다는 것입니다(데몬을 종료하면 웹 서비스가 다시 시작됩니다).

하지만 올바른 서비스 상태를 표시하기 위해 스크립트에서 무엇을 놓치고 있습니까?

답변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}"

이제 예상대로 작동합니다.

관련 정보