Was ist status_of_proc und wie nenne ich es?

10

Im Init-Skript von Nginx in Debian 7 (Wheezy) habe ich folgenden Auszug gelesen:

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

Dieser Code läuft einwandfrei und sudo service nginx statusgibt aus [ ok ] nginx is running. Noch status_of_procist nicht in Bash definiert, noch in Bindestrich:

$ type status_of_proc
status_of_proc: not found

Wenn ich den gleichen Scheck in das Nginx-Skript eingefügt habe, habe ich folgendes Ergebnis erhalten:

status_of_proc is a shell function

Das Ausführen von bash für die Init-Datei selbst lieferte weitere Erklärungen:

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
}

Das Einfügen des gleichen Funktionsaufrufs in ein von mir erstelltes Init-Skript ergab jedoch, dass die Funktion undefiniert war. Es hat also nichts damit zu tun, dass Init-Skripte etwas Besonderes sind. Es wurde auch nicht zuvor im Init-Skript deklariert. Im Internet habe ich gelesen, dass es Teil des LSB ist, aber ich kann nicht herausfinden, wie ich es nenne. Kann mir bitte jemand helfen, herauszufinden, wie ich diese wunderbare Funktion nutzen kann?

Rovanion
quelle
Warum wird diese Frage als nicht thematisch betrachtet?
Piotr Jurkiewicz
@PiotrJurkiewicz -> Nicht mehr. :)
Muhamed Huseinbašić

Antworten:

16

Ich fand heraus, dass die Funktion aus /lib/lsb/init-functionsdem Nginx-Init-Skript stammt. Also füge hinzu:

. /lib/lsb/init-functions

Zu meinem Init-Skript löste sich das Problem.

Rovanion
quelle