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 status
generuje [ ok ] nginx is running
. Jednak status_of_proc
nie 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?
źródło
Odpowiedzi:
Odkryłem, że funkcja pochodzi ze
/lib/lsb/init-functions
skryptu inicjującego nginx. Więc dodając:Do mojego skryptu init rozwiązałem problem.
źródło