status_of_proc คืออะไรและฉันจะเรียกมันได้อย่างไร


10

ในสคริปต์ 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 แต่ฉันไม่สามารถเข้าใจได้ว่าจะเรียกมันยังไง ใครบางคนจะช่วยฉันหาวิธีใช้ฟังก์ชันที่ยอดเยี่ยมนี้ได้ไหม?


ทำไมคำถามนี้จึงถูกพิจารณาว่าเป็นหัวข้อนอก?
Piotr Jurkiewicz

@PiotrJurkiewicz -> ไม่อีกแล้ว :)
Muhamed Huseinbašić

คำตอบ:


17

ฉันพบว่าฟังก์ชันนั้นมาจาก/lib/lsb/init-functionsในสคริปต์ init ของ nginx ดังนั้นการเพิ่ม:

. /lib/lsb/init-functions

สคริปต์เริ่มต้นของฉันแก้ไขปัญหาได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.