Freebsd
FreeBSD 7.3:服務正在執行,但狀態顯示“未執行”
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"