2 votes

FreeBSD rc.d script ne fonctionne pas au démarrage

J'essaie d'écrire un rc.d script pour démarrer le fastcgi-mono-server4 sur FreeBSD lorsque l'ordinateur démarre - afin de le faire fonctionner avec nginx.

Le script fonctionne lorsque je l'exécute en étant connecté au serveur - mais au démarrage, j'obtiens le message suivant :

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

Le script se présente comme suit :

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

Au cas où ce ne serait pas déjà super clair, je suis assez nouveau à la fois sur FreeBSD et sur les scripts, donc je suis en quelque sorte préparé à un petit détail évident que j'ai négligé.

J'aimerais beaucoup savoir exactement pourquoi cela échoue et comment le résoudre, mais aussi si quelqu'un a une meilleure façon d'y parvenir, je suis ouvert à toutes les idées.

4voto

Zen Oracle Guides Points 21

Le problème que vous avez énoncé est peut-être lié à la différence de PATH de vous lorsque vous exécutez script en tant qu'utilisateur connecté et lorsque script est exécuté au démarrage.

La sortie de 'which' dépend de PATH. Ainsi, si l'endroit où se trouve votre exécutable n'est pas sur PATH, il ne retournera rien.

Je vous conseille de spécifier explicitement le chemin de l'exécutable dans $command. Ou modifiez PATH en plus de ce script comme ceci :

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

1voto

Kondybas Points 6806

Utiliser la variable rc command_args au lieu de apps . RC traite command_args d'une certaine manière en filtrant des symboles spéciaux pour l'évaluation.

0voto

oriole4008 Points 731

Il s'est avéré que le vrai problème se trouvait dans la ligne suivante :

command=$(which fastcgi-mono-server4)

Je suppose que ce qui s'est passé, c'est qu'au démarrage, cela a donné une chaîne vide, ce qui signifie que "-applications..." a été évalué comme une commande.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X