FreeBSD 7.3:サービスは実行中ですが、ステータスは「実行されません」と表示されます。

FreeBSD 7.3:サービスは実行中ですが、ステータスは「実行されません」と表示されます。

FreeBSD 7.3のサービスに問題があります:

1) 「service my_secret_service start」コマンドで開始しますが、後で「service my_secret_service status」と入力すると実行されないと表示されます。しかし、その過程ですべてのスレッド(Pythonスレッド)(ps auwx | grep Secret_service)に存在し、サービスログ、サービスにアクセスするwebiなどによって動作することがわかります。

2) 「service my_secret_service stop」と入力すると、基本プロセスとすべてのスレッドは終了しません。

私の秘密のRCスクリプト:

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

何が問題なの?

アップデート #1.問題はpidfileのパスにあるようですが、これは非常に興味深いものです。ありがとうございます!

ベストアンサー1

このコマンドは、service起動時に設定されたプロセスID(pid)を見つけます。あなたのサービスはこれを次のように定義します。

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

要求すると、statusこのファイルからpidが抽出され、プロセスが実行されていることが確認されます。

Iの出力を確認すると、ps実行中のサービスのプロセスIDがpidファイルの内容と一致しないことがわかります。

あなたのrcスクリプトは少し怪しいようです。 pidfileパスに "secret_service"を追加しますか?もしそうなら、そこにいることを確認してください。

より一般的に:

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

バラよりBSDの実用的なrc.dスクリプト

おすすめ記事