Freebsd

FreeBSD rc.d 腳本在啟動時不起作用

  • April 1, 2012

我正在嘗試編寫一個 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 腳本都很陌生,所以我已經為我忽略的一些明顯的小細節做好了準備。

我非常想確切地知道為什麼會失敗以及如何解決它,而且如果有人有更好的方法來實現這一點,那麼我對想法持開放態度。

您所說的問題可能與您在以登錄使用者身份執行腳本和在啟動時執行腳本時的 PATH 差異有關。

‘which’ 的輸出取決於 PATH。因此,如果您的執行檔所在的位置不在 PATH 上,它將不會返回任何內容。

我建議您在 $command 中明確指定執行檔的路徑。或在此腳本之上修改 PATH,如下所示:

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

command_args改用rc 變數apps。RC 以某種方式處理 command_args,篩選其中的特殊符號以進行評估。

引用自:https://serverfault.com/questions/375703