В сценарии инициализации nginx в Debian 7 (Wheezy) я прочитал следующий отрывок:
status)
status_of_proc -p /var/run/$NAME.pid "$DAEMON" nginx && exit 0 || exit $?
;;
Этот код работает нормально и sudo service nginx status
выходы [ ok ] nginx is running
. Все же status_of_proc
не определен ни в bash, ни в тире:
$ type status_of_proc
status_of_proc: not found
Хотя, если я вставил ту же проверку в nginx-скрипт, то получил следующий результат:
status_of_proc is a shell function
И запуск bash в самом файле инициализации дал дальнейшее объяснение:
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
}
Однако вставка того же вызова функции в сценарий инициализации, сделанный мной, вернула, что функция не определена. Так что это не имеет ничего общего с особенностями сценариев инициализации. Он также не объявлен ранее в сценарии инициализации. Я читал в сети, что это часть LSB, но не могу понять, как это назвать. Кто-нибудь, пожалуйста, поможет мне понять, как использовать эту замечательную функцию?
Я обнаружил, что функция была получена из /lib/lsb/init-functions
в скрипте инициализации nginx. Итак, добавляем:
. /lib/lsb/init-functions
Чтобы мой скрипт инициализации решил проблему.