FreeBSD rc.d 脚本在启动时不起作用

FreeBSD rc.d 脚本在启动时不起作用

我正在尝试编写一个 rc.d 脚本以便在计算机启动时启动 FreeBSD 上的 fastcgi-mono-server4 - 以便与 nginx 一起运行它。

当我登录服务器并执行该脚本时,该脚本有效 - 但在启动时我收到以下消息:

eval: -applications=192.168.50.133:/:/usr/local/www/nginx: not found

该脚本如下所示:

#!/bin/sh

# PROVIDE: monofcgid
# REQUIRE: LOGIN nginx
# KEYWORD: shutdown


. /etc/rc.subr

name="monofcgid"
rcvar="monofcgid_enable"
stop_cmd="${name}_stop"
start_cmd="${name}_start"
start_precmd="${name}_prestart"
start_postcmd="${name}_poststart"
stop_postcmd="${name}_poststop"
command=$(which fastcgi-mono-server4)
apps="192.168.50.133:/:/usr/local/www/nginx"
pidfile="/var/run/${name}.pid"

monofcgid_prestart()
{
        if [ -f $pidfile ]; then
                echo "monofcgid is already running."
                exit 0
        fi
}

monofcgid_start()
{
        echo "Starting monofcgid."
        ${command} -applications=${apps} -socket=tcp:127.0.0.1:9000 &
}


monofcgid_poststart()
{
        MONOSERVER_PID=$(ps ax | grep mono/4.0/fastcgi-m | grep -v grep | awk '{print $1}')
        if [ -f $pidfile ]; then
                rm $pidfile
        fi
        if [ -n $MONOSERVER_PID ]; then
                echo $MONOSERVER_PID > $pidfile
        fi
}

monofcgid_stop()
{
        if [ -f $pidfile ]; then
                echo "Stopping monofcgid."
                kill $(cat $pidfile)
                echo "Stopped monofcgid."
        else
                echo "monofcgid is not running."
                exit 0
        fi
}

monofcgid_poststop()
{
        rm $pidfile
}


load_rc_config $name
run_rc_command "$1"

如果还不是很清楚,我对 FreeBSD 和 sh 脚本都还很陌生,所以我对我忽略的一些明显的小细节有所准备。

我非常想知道为什么会失败以及如何解决它,但如果有人有更好的方法来实现这一点,那么我愿意接受所有的想法。

答案1

您提出的问题可能与您以登录用户身份执行脚本时和启动时执行脚本时的 PATH 差异有关。

'which' 的输出取决于 PATH。因此,如果您的可执行文件所在的位置不在 PATH 上,它将不返回任何内容。

我建议您在 $command 中明确指定可执行文件的路径。或者在此脚本之上修改 PATH,如下所示:

PATH="${PATH}:/path/to/where/daemon/lies"

答案2

command_args改用rc 变量apps。RC 以某种方式处理 command_args 并筛选其中的特殊符号进行评估。

答案3

事实证明,真正的问题出在下面这一行:

command=$(which fastcgi-mono-server4)

我猜测发生的事情是,在启动时这导致了空字符串,这意味着“-applications ...”被评估为命令。

相关内容