Freebsd

FreeBSD 7.3:服務正在執行,但狀態顯示“未執行”

  • April 17, 2018

FreeBSD 7.3 上的一項服務有問題:

1)它以命令“service my_secret_service start”開始,但稍後如果我輸入“service my_secret_service status” - 它顯示為未執行。但是在程序中它存在(ps auwx | grep secret_service)和所有執行緒(python執行緒),我可以看到它正在工作,因為服務日誌,訪問服務的webui等。

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 的路徑中,非常有趣。謝謝!

當您使用service命令時,將查找啟動時設置的程序 id (pid)。您的服務將其定義為:

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

當您請求時,status將從該文件中獲取 pid,並檢查程序是否正在執行。

如果您檢查ps我很確定的輸出,您會發現正在執行的服務的程序 id 與 pidfile 中的不匹配。

您的 rc 腳本確實看起來有點可疑。您確定要在 pidfile 路徑中添加“secret_service”嗎?如果是這樣,請確保它在那裡。

這將更常見於:

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

請參閱BSD 中的實用 rc.d 腳本

引用自:https://unix.stackexchange.com/questions/438143