Debian 7(Wheezy)のnginxのinitスクリプトで、次の抜粋を読みました。
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
また、initファイル自体で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
}
しかし、同じ関数呼び出しを自分で作成したinitスクリプトに挿入すると、関数が未定義であることが返されました。したがって、initスクリプトが特別であることとは関係ありません。また、以前にinitスクリプトで宣言されていません。ネットの周りで、それはLSBの一部であると読みましたが、それをどのように呼び出すかわかりません。誰かがこの素晴らしい機能の使い方を理解するのを手伝ってくれませんか?
関数のソースはnginx initスクリプトの/lib/lsb/init-functions
であることがわかりました。だから追加:
. /lib/lsb/init-functions
私のinitスクリプトは問題を解決しました。