ในสคริปต์ init ของ nginx ใน Debian 7 (Wheezy) ฉันอ่าน exerpt ต่อไปนี้:
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
ไม่ได้กำหนดไว้ในทุบตีและไม่รีบ:
$ type status_of_proc
status_of_proc: not found
แม้ว่าฉันจะใส่เช็คเดียวกันลงในสคริปต์ nginx แต่ฉันได้ผลลัพธ์ดังต่อไปนี้:
status_of_proc is a shell function
และการใช้ bash ในไฟล์ init นั้นมีคำอธิบายเพิ่มเติม:
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 เป็นพิเศษ ไม่ว่าจะเป็นการประกาศก่อนหน้านี้ในสคริปต์เริ่มต้น ฉันพบว่ามันเป็นส่วนหนึ่งของ LSB แต่ฉันไม่สามารถเข้าใจได้ว่าจะเรียกมันยังไง ใครบางคนจะช่วยฉันหาวิธีใช้ฟังก์ชันที่ยอดเยี่ยมนี้ได้ไหม?