【问题标题】:how to run process in other user account in init.d如何在 init.d 中的其他用户帐户中运行进程
【发布时间】:2013-12-09 17:48:07
【问题描述】:

我正在寻找一种方法来以用户 www-data 的身份自动运行 mono fastcgi 4 服务器作为进程 像阿帕奇运行。 线

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

工作正常,但如果从 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 中为 Nginx 运行 mono 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

【问题讨论】:

    标签: nginx debian su init.d fastcgi-mono-server


    【解决方案1】:

    请不要使用 su。改用debian的start-stop-daemon。您需要的一切都已存在。

    【讨论】:

    • 我试过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/* 看看它是如何使用的。
    • 如果更改了参数或占用过多的 cpu,则应重新启动。可以使用 `kill ${MONOSERVER_PID}` 作为有问题的,还是必须使用 start-stop-daemon ?如何实现重启命令?
    • @Andrus 按需重启完全不同,但您只需使用初始化脚本,使用停止/启动顺序添加重启选项,这是一种公认​​的做法。
    【解决方案2】:

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

    【讨论】:

    • 在这种情况下 ${MONOSERVER} 参数不会被替换。 ${} 参数也可能包含引号
    • 很抱歉,我在 bash 方面不够熟练,无法回答您
    猜你喜欢
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 2023-04-07
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多