FreeBSD - executa .jar como daemon, status do serviço XX retorna 'não em execução'

0

Eu gostaria de executar um jar como um daemon no FreeBSD 11.0-RELEASE-p8. Este é o arquivo de serviço que eu tenho:

!/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"

O daemon realmente cria um arquivo PID no início com o PID correto, no entanto, quando tento executar

service tabor-web status

Eu recebi resposta

taborweb is not running.

Quando eu verifico com

# ps -aux | grep java

Eu posso ver que está em execução (e o serviço da web está acessível).

 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

mostra

2655

Isso obviamente não é muito bom para assistir automaticamente - parece que o site está em baixo, mesmo que esteja em alta. A boa notícia é que o programa daemon é executado como deveria (ele reinicia o serviço da web se eu o matar).

Mas o que falta no script para mostrar o status correto do serviço, por favor?

    
por eMko 01.04.2017 / 18:07

1 resposta

0

Bem, encontrei um erro simples. O serviço procurava o arquivo PID do serviço java. Mas deveria estar procurando pelo arquivo PID do daemon.

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

e depois

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

agora funciona como pretendido.

    
por 01.04.2017 / 19:24