FreeBSD 7.3: o serviço está funcionando, mas o status mostra “não está em execução”

0

Algo errado com um serviço no FreeBSD 7.3:

1) começa com o comando "service my_secret_service start", mas depois, se eu digitar "service my_secret_service status", ele mostra como não sendo executado. Mas nos processos ele existe (ps auwx | grep secret_service) com todos os threads (threads python) e eu posso ver que ele está funcionando por causa dos logs de serviço, acesso ao webui de serviço, etc.

2) Se eu digitar "service my_secret_service stop", ele não poderá matar o processo principal e todos os threads.

Meu script rc secreto:

#!/bin/sh                                                                                                                                                                                                   

# PROVIDE: sbdns_daemon

. /etc/rc.subr

CONFROOT=/usr/local/secret_group/secret_service/etc
export CONFROOT

name=secret_service_daemon
rcvar='set_rcvar'
pidfile="/var/run/secret_service/${name}.pid"
logfile="${CONFROOT}/log.conf"

command_interpreter=/usr/bin/python
command="full path to python service file"
command_args="--logconf ${logfile} -d "
stop_postcmd="${name}_post_stop"

secret_service_daemon_post_stop()
{
    n=0 
    until [ $n -ge 3 ] 
    do  
        child_processes=$(check_alive_processes)
        if [ -z "$child_processes" ]
        then
            echo "All child processes were shutdown gracefully!"
            exit 0
        else
            if [ $n = 0 ] 
            then
                echo "Processes are still alive. Waiting for them to shutdown gracefully..."
            fi  
            n=$(($n+1))
            echo "Attempt $n/3, alive processes: $child_processes"
            sleep 5
        fi  
    done
    echo "Not all processes were terminated! Forcibly terminating child processes: $child_processes!"
    pkill -if "${command}"
}
check_alive_processes()
{
    echo "$(pgrep -if -d " " "${command}")"
}

chmod +x $command
load_rc_config "$name"

secret_service_daemon_enable=${secret_service_enable-NO}

echo "Enabled: ${secret_service_daemon_enable}"

run_rc_command "$1"

O que há de errado?

Atualização # 1. Parece que o problema estava apenas no caminho para o pidfile, muito interessante. Obrigada!

    
por Sergius 16.04.2018 / 18:17

1 resposta

3

Quando você usar o comando service , procurará o ID do processo (pid) como foi definido quando foi iniciado. Seu serviço tem definido como:

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

Quando você perguntar por status , o pid será buscado neste arquivo e ele verificará se o processo está sendo executado.

Se você examinar a saída de ps , tenho certeza de que descobrirá que o ID do processo do seu serviço em execução não corresponde ao que está no pidfile.

Seu script rc parece um pouco suspeito. Tem certeza de que deseja "secret_service" no caminho do pidfile? Se sim, verifique se está lá.

Seria mais comum com:

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

Veja Scripts rc.d práticos em BSD

    
por 16.04.2018 / 18:35