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}"
이제 예상대로 작동합니다.