O que é status_of_proc e como eu o chamo?

10

No script init do nginx no Debian 7 (Wheezy), li o seguinte esforço:

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

Esse código funciona muito bem e sudo service nginx statusgera resultados [ ok ] nginx is running. No entanto, status_of_procnão está definido no bash, nem no dash:

$ type status_of_proc
status_of_proc: not found

Embora se eu inserisse a mesma verificação no script nginx, obtivesse o seguinte resultado:

status_of_proc is a shell function

E executar o bash no próprio arquivo init forneceu mais explicações:

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
}

No entanto, a inserção da mesma chamada de função em um script init feito por mim retornou que a função não estava definida. Portanto, não tem nada a ver com os scripts init serem especiais. Nem é declarado anteriormente no script init. Ao redor da rede, li que faz parte do LSB, mas não consigo descobrir como chamá-lo. Alguém por favor me ajudará a descobrir como usar essa função maravilhosa?

Rovanion
fonte
Por que essa pergunta é considerada fora de tópico?
Piotr Jurkiewicz 4/15/15
@PiotrJurkiewicz -> Não é mais. :)
Muhamed Huseinbašić

Respostas:

17

Eu descobri que a função era originada /lib/lsb/init-functionsno script init do nginx. Então adicionando:

. /lib/lsb/init-functions

Para o meu script init resolveu o problema.

Rovanion
fonte