Qu'est-ce que status_of_proc et comment l'appeler?

10

Dans le script init de nginx dans Debian 7 (Wheezy), j'ai lu l'extrait suivant:

status)
            status_of_proc -p /var/run/$NAME.pid "$DAEMON" nginx && exit 0 || exit $?
            ;;

Ce code fonctionne très bien et sudo service nginx statussort [ ok ] nginx is running. Pourtant, status_of_procn'est pas défini en bash, ni en tiret:

$ type status_of_proc
status_of_proc: not found

Bien que si j'insérais la même vérification dans le script nginx, j'obtenais le résultat suivant:

status_of_proc is a shell function

Et l'exécution de bash sur le fichier init lui-même a fourni des explications supplémentaires:

status_of_proc is a function
status_of_proc () 
{ 
    local pidfile daemon name status OPTIND;
    pidfile=;
    OPTIND=1;
    while getopts p: opt; do
        case "$opt" in 
            p)
                pidfile="$OPTARG"
            ;;
        esac;
    done;
    shift $(($OPTIND - 1));
    if [ -n "$pidfile" ]; then
        pidfile="-p $pidfile";
    fi;
    daemon="$1";
    name="$2";
    status="0";
    pidofproc $pidfile $daemon > /dev/null || status="$?";
    if [ "$status" = 0 ]; then
        log_success_msg "$name is running";
        return 0;
    else
        if [ "$status" = 4 ]; then
            log_failure_msg "could not access PID file for $name";
            return $status;
        else
            log_failure_msg "$name is not running";
            return $status;
        fi;
    fi
}

Pourtant, l'insertion du même appel de fonction dans un script init fait par moi-même a renvoyé que la fonction n'était pas définie. Cela n'a donc rien à voir avec les scripts d'initialisation étant spéciaux. Il n'est pas non plus déclaré précédemment dans le script init. Autour du filet, j'ai lu que cela faisait partie du LSB, mais je ne sais pas comment l'appeler. Quelqu'un peut-il m'aider à comprendre comment utiliser cette merveilleuse fonction?

Rovanion
la source
Pourquoi cette question est-elle considérée hors sujet?
Piotr Jurkiewicz
@PiotrJurkiewicz -> Plus maintenant. :)
Muhamed Huseinbašić

Réponses:

17

J'ai trouvé que la fonction provenait du /lib/lsb/init-functionsscript d'initialisation nginx. Donc, en ajoutant:

. /lib/lsb/init-functions

Pour mon script init a résolu le problème.

Rovanion
la source