O script rbs.d do FreeBSD não funciona ao inicializar

2

Eu estou tentando escrever um script rc.d para inicializar o fastcgi-mono-server4 no FreeBSD quando o computador é iniciado - para executá-lo com o nginx.

O script funciona quando eu o executo enquanto estou logado no servidor - mas ao inicializar eu recebo a seguinte mensagem:

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

O script é o seguinte:

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

Caso ainda não esteja muito claro, eu sou relativamente novo tanto para o FreeBSD quanto para os scripts sh, então estou meio preparado para alguns pequenos detalhes óbvios que eu ignorei.

Eu gostaria muito de saber exatamente por que isso está falhando e como resolvê-lo, mas também se alguém tiver uma maneira melhor de realizar isso, então estou aberto a idéias.

    
por kastermester 01.04.2012 / 16:12

3 respostas

4

O problema que você declarou está possivelmente relacionado à diferença no PATH de você quando você executa o script como usuário logado e quando o script é executado na inicialização.

A saída de 'which' depende do PATH. Então, se o lugar onde seu executável reside não estiver no PATH, ele não retornará nada.

Eu aconselho você a especificar o caminho para o executável no $ command explicitamente. Ou modifique o PATH no topo deste script como este:

PATH="${PATH}:/path/to/where/daemon/lies"
    
por 01.04.2012 / 16:52
1

Use a variável rc command_args em vez de apps . RC trata as command_args de uma forma que tria símbolos especiais para avaliação.

    
por 01.04.2012 / 16:19
0

Acontece que o verdadeiro problema estava na seguinte linha:

command=$(which fastcgi-mono-server4)

Eu estou supondo que o que aconteceu é que, na inicialização, isso resultou na string vazia, o que significa que "-applications ..." foi avaliado como um comando.

    
por 01.04.2012 / 16:59