Trong tập lệnh init của nginx trong Debian 7 (Wheezy) tôi đã đọc đoạn trích sau:
status)
status_of_proc -p /var/run/$NAME.pid "$DAEMON" nginx && exit 0 || exit $?
;;
Mã này chỉ chạy tốt và sudo service nginx status
đầu ra [ ok ] nginx is running
. Tuy nhiên, status_of_proc
không được định nghĩa trong bash, cũng không phải trong dấu gạch ngang:
$ type status_of_proc
status_of_proc: not found
Mặc dù nếu tôi chèn cùng một kiểm tra vào tập lệnh nginx, tôi đã nhận được kết quả như sau:
status_of_proc is a shell function
Và việc chạy bash trên chính tệp init đã cung cấp giải thích thêm:
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
}
Tuy nhiên, việc chèn lệnh gọi hàm tương tự vào tập lệnh init do chính tôi tạo ra đã trả về rằng hàm không được xác định. Vì vậy, nó không có gì để với init script là đặc biệt. Nó cũng không được khai báo trước đó trong tập lệnh init. Trên mạng tôi đọc rằng nó là một phần của LSB, nhưng tôi không thể tìm ra cách gọi nó. Ai đó sẽ giúp tôi tìm ra cách sử dụng chức năng tuyệt vời này?