2012-09-09 83 views
0

我想從C語言編寫CGI腳本這是一個ucLinux的系統內重新啓動寶兒Web服務器。系統調用(「/ etc/init.d/boa.sh restart」)成功運行,我從日誌中看到Boa已停止,但從未啓動。從CLI運行boa.sh重啓確實可行。下面顯示了boa.sh腳本。任何想法,爲什麼它不完全重新啓動?請注意,CGI腳本本身在Boa中運行。呼叫重啓從CGI腳本沒有完全重新啓動

 

NAME=boa 
PROG=/bin/boa 
OPTIONS="-c /etc/" 
LOCKFILE=/var/lock/boa 
STDLOGFILE=/var/log/boaerrlog.log 

case "$1" in 
    start) 
     echo -n $"Starting $NAME: " 
     boa $OPTIONS > /dev/null 2>&1 & 
#  boa $OPTIONS >$STDOUTFILE 2>&1 & 
     touch $LOCKFILE 
     echo "OK" 
     ;; 
    stop) 
     echo -n $"Stopping $NAME: " 
     kill -TERM `pidof $NAME` > /dev/null 2>&1 
     rm -f $LOCKFILE $PIDFILE > /dev/null 2>&1 
     echo "OK" 
     ;; 
    restart) 
     $0 stop 
     $0 start 
     ;; 
    status) 
     echo "running" 
     ;; 
esac 
 
+0

運行CGI腳本的用戶是否有權限啓動所有文件/目錄?您可能需要通過CGI腳本使用sudo命令才能獲得所有必需的權限。 – Lipongo

+0

是的權限應該沒問題,它是一個非常小的嵌入式系統,只有root用戶。感謝您的建議。 –

+0

您是否有任何記錄表明停止實際上已成功完成?或記錄表明開始實際上是開始? – Lipongo

回答

1

收集到的信息在聊天室中。

被引導通過在CGI的系統調用重新啓動的過程實際上是由同一過程服務。這不起作用,因爲術語信號可能會殺死樹中的所有進程,包括重新啓動的boa進程。

一種替代方法是具有可重新啓動生產實例蟒運行的第二個實例。生產實例可以重新啓動用於重新啓動生產實例的第二個實例。

+0

另一種選擇是使用批處理設施。像'echo「/etc/init.d/boa.sh restart」|「在現在'。這會排隊工作以運行(大約立即)來重新啓動服務器,但它將是'atd'守護進程的子節點,而不是在'停止'階段被殺死的'boa'的子節點。 – twalberg

+0

在討論過程中,我們發現Linux的發行版(嵌入式)不支持at或cron,因爲這是我在聊天期間提供的另一個選項。 – Lipongo

+0

感謝您的幫助,所有非常好的信息。我會試着在本週提出一個解決方案,不確定我是否想要去雙胞胎蟒蛇路線。 –