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 status
gibt aus [ ok ] nginx is running
. Noch status_of_proc
ist 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?
quelle
Antworten:
Ich fand heraus, dass die Funktion aus
/lib/lsb/init-functions
dem Nginx-Init-Skript stammt. Also füge hinzu:Zu meinem Init-Skript löste sich das Problem.
quelle