Nginx 如何在init.d中的其他用户帐户中运行进程

Nginx 如何在init.d中的其他用户帐户中运行进程,nginx,debian,su,init.d,fastcgi-mono-server,Nginx,Debian,Su,Init.d,Fastcgi Mono Server,我正在寻找一种方法来自动运行mono fastcgi 4服务器作为用户www数据的进程 就像apache运行一样。 线 工作正常,但如果从root调用,它将作为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

我正在寻找一种方法来自动运行mono fastcgi 4服务器作为用户www数据的进程 就像apache运行一样。 线

工作正常,但如果从root调用,它将作为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中运行mono fastcgi server for Nginx的最佳实践是什么

#!/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

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" & 

请不要使用su。使用debian的。您所需要的一切都已经存在。

在本例中,${MONOSERVER}参数不会被替换。另外${}参数也可能包含引号。很抱歉,我在bash方面还不够熟练,无法回答您的问题。我尝试了
start-stop daemon-v-c www-data--start--exec${MONOSERVER}--/applications=${WEBAPPS}/maxconns=100/maxreqs=100/printlog/loglevels=Error,Warning/logfile=/var/log/nginx/fastcgi-mono-server.log/socket=tcp:127.0.0.1:9000&
这是最好的解决方案吗?如何阻止它?--停止?您不需要与shell分开运行它,而是通过init脚本来运行它。只需执行一个
grep start-stop-daemon/etc/init.d/*
来查看is是如何使用的。如果参数发生更改或占用太多cpu,则应重新启动它。使用“kill${MONOSERVER_PID}”是否可以,或者必须启动或停止使用的守护进程?如何实现重启命令?@Andrus按需重启完全不同,但您只需使用init脚本,使用停止/启动序列在那里添加重启选项,这是一种公认的做法。
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" &