Descobri que a função foi originada de /lib/lsb/init-functions
no script de inicialização do nginx. Então adicionando:
. /lib/lsb/init-functions
Para o meu script de inicialização, resolvi o problema.
No script init do nginx no Debian 7 (Wheezy) eu li o seguinte trecho:
status)
status_of_proc -p /var/run/$NAME.pid "$DAEMON" nginx && exit 0 || exit $?
;;
Este código é executado corretamente e sudo service nginx status
outputs [ ok ] nginx is running
. Ainda status_of_proc
não está definido no bash, nem no traço:
$ type status_of_proc
status_of_proc: not found
No entanto, se eu inseri o mesmo cheque no script nginx, obtive o seguinte resultado:
status_of_proc is a shell function
E a execução do 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, inserir a mesma chamada de função em um script de inicialização feito por mim retornou que a função estava indefinida. Portanto, não tem nada a ver com scripts init sendo especiais. Nem é declarado anteriormente no script de inicialização. Ao redor da rede eu li que é parte do LSB, mas não consigo descobrir como chamá-lo. Alguém por favor me ajudará a descobrir como usar essa maravilhosa função?
Tags init.d debian-wheezy lsb