Status_of_proc là gì và làm thế nào để tôi gọi nó?


10

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_prockhô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?


Tại sao câu hỏi này được coi là lạc đề?
Piotr Jurkiewicz

@PiotrJurkiewicz -> Không còn nữa. :)
Muhamed Huseinbašić

Câu trả lời:


17

Tôi thấy rằng hàm này có nguồn gốc từ /lib/lsb/init-functionstập lệnh nginx init. Vì vậy, thêm:

. /lib/lsb/init-functions

Để kịch bản init của tôi giải quyết vấn đề.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.