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}"
これで期待どおりに動作します。