Co to jest status_pr_proc i jak go nazwać?


10

W skrypcie inicjującym nginx w Debianie 7 (Wheezy) przeczytałem następujące ćwiczenie:

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

Ten kod działa dobrze i sudo service nginx statusgeneruje [ ok ] nginx is running. Jednak status_of_procnie jest zdefiniowany w bash ani w desce rozdzielczej:

$ type status_of_proc
status_of_proc: not found

Chociaż jeśli wstawiłem ten sam czek do skryptu nginx, otrzymałem następujący wynik:

status_of_proc is a shell function

Uruchomienie bash na samym pliku init dostarczyło dalszych wyjaśnień:

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
}

Jednak wstawienie tego samego wywołania funkcji do skryptu inicjującego utworzonego przeze mnie zwróciło, że funkcja jest niezdefiniowana. Więc nie ma to nic wspólnego ze specjalnymi skryptami inicjującymi. Nie jest to również zadeklarowane wcześniej w skrypcie inicjującym. Wokół sieci czytam, że jest to część LSB, ale nie wiem, jak to nazwać. Czy ktoś pomoże mi dowiedzieć się, jak korzystać z tej wspaniałej funkcji?


Dlaczego to pytanie jest uważane za nie na temat?
Piotr Jurkiewicz

@PiotrJurkiewicz -> Już nie. :)
Muhamed Huseinbašić

Odpowiedzi:


17

Odkryłem, że funkcja pochodzi ze /lib/lsb/init-functionsskryptu inicjującego nginx. Więc dodając:

. /lib/lsb/init-functions

Do mojego skryptu init rozwiązałem problem.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.