2013-12-09 24 views
0

運行在其他用戶帳戶過程中,我正在尋找一種方式來自動運行單FastCGI的4臺服務器過程,用戶WWW的數據 如Apache運行。 線如何在init.d中

${MONOSERVER} /applications=${WEBAPPS} /printlog /loglevels=Error,Warning 
    /logfile=/var/log/nginx/fastcgi-mono-server.log /socket=tcp:127.0.0.1:9000 & 

工作正常,但如果從根調用以root身份運行。

我試圖

su www-data -c ${MONOSERVER} /applications=${WEBAPPS} /printlog /loglevels=Error,Warning 
    /logfile=/var/log/nginx/fastcgi-mono-server.log /socket=tcp:127.0.0.1:9000 & 

如下/etc/init.d/monoserve腳本,但它會返回錯誤

Error: Pipe socket is not bound. 

看起來參數不通過。 如何解決它? 在Debian中運行Nginx的單聲道fastcgi服務器的最佳做法是什麼?

#!/bin/sh 

### BEGIN INIT INFO 
# Provides:   monoserve.sh 
# Required-Start: $local_fs $syslog $remote_fs 
# Required-Stop:  $local_fs $syslog $remote_fs 
# Default-Start:  2 3 4 5 
# Default-Stop:  0 1 6 
# Short-Description: Start fastcgi mono server with hosts 
### END INIT INFO 

PATH=/opt/mono-3.2/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 
DAEMON=/opt/mono-3.2/bin/mono 
NAME=monoserver 
DESC=monoserver 

MONOSERVER=$(which fastcgi-mono-server54linklisatud) 
MONOSERVER_PID=$(ps auxf | grep fastcgi-mono-server4.exe | grep -v grep | awk '{print $2}') 
WEBAPPS="/:/var/www/html/france/" 

case "$1" in 
     start) 
       if [ -z "${MONOSERVER_PID}" ]; then 
         #echo "starting mono server" 
       su www-data -c ${MONOSERVER} /applications=${WEBAPPS} /printlog /loglevels=Error,Warning /logfile=/var/log/nginx/fastcgi-mono-server.log /socket=tcp:127.0.0.1:9000 & 

         echo "mono fastcgi server started" 
       else 
         #echo ${WEBAPPS} 
         echo "error: mono fastcgi server is already running" 
       fi 
     ;; 
     stop) 
       if [ -n "${MONOSERVER_PID}" ]; then 
         kill ${MONOSERVER_PID} 
         echo "mono fastcgi server stopped" 
       else 
         echo "error: mono fastcgi server is not running" 
       fi 
     ;; 
esac 

exit 0 

回答

0

請不要使用su。改用debian的start-stop-daemon。你所需要的只是已經在那裏。

+0

我試過了'start-stop-daemon -v -c www-data --start --exec $ { MONOSERVER} -/applications = $ {WEBAPPS} /maxconns = 100/maxreqs = 100/printlog/loglevels =錯誤,警告。 /logfile=/var/log/nginx/fastcgi-mono-server.log /socket=tcp:127.0.0.1:9000& '這是最好的解決辦法?如何阻止它? – Andrus

+0

- 停止?你不需要從shell單獨運行它,你可以從init腳本執行它。只要做一個'grep start-stop-daemon/etc/init.d/*'來看看如何使用。 –

+0

如果參數更改或需要太多的CPU,它應該重新啓動。可以使用'kill $ {MONOSERVER_PID}'作爲問題還是必須使用start-stop-daemon?如何實現重啓命令? – Andrus

0

su -c要求其命令用引號括起來,像

su www-data -c "${MONOSERVER} /applications=${WEBAPPS} /printlog /loglevels=Error,Warning /logfile=/var/log/nginx/fastcgi-mono-server.log /socket=tcp:127.0.0.1:9000" & 
+0

在這種情況下$ {MONOSERVER}參數不會被替換。另外$ {}參數也可能包含引號 – Andrus

+0

對不起,但我沒有足夠的技巧在bash中回答你 – miniBill