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"