Dalam skrip init dari nginx di Debian 7 (Wheezy) saya membaca kutipan berikut:
status)
status_of_proc -p /var/run/$NAME.pid "$DAEMON" nginx && exit 0 || exit $?
;;
Kode ini berjalan dengan baik dan sudo service nginx status
keluaran [ ok ] nginx is running
. Namun status_of_proc
tidak didefinisikan dalam bash, tidak juga dalam tanda hubung:
$ type status_of_proc
status_of_proc: not found
Meskipun jika saya memasukkan cek yang sama ke skrip nginx saya mendapat hasil berikut:
status_of_proc is a shell function
Dan menjalankan bash pada file init itu sendiri memberikan penjelasan lebih lanjut:
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
}
Namun memasukkan panggilan fungsi yang sama ke dalam skrip init yang dibuat oleh saya sendiri kembali bahwa fungsi tersebut tidak terdefinisi. Jadi tidak ada hubungannya dengan skrip init menjadi istimewa. Juga tidak dinyatakan sebelumnya dalam skrip init. Di internet saya membaca bahwa ini adalah bagian dari LSB, tetapi saya tidak tahu bagaimana menyebutnya. Akankah seseorang tolong bantu saya mencari cara menggunakan fungsi yang luar biasa ini?
sumber
Jawaban:
Saya menemukan bahwa fungsinya bersumber dari
/lib/lsb/init-functions
skrip init nginx. Jadi menambahkan:Untuk skrip init saya memecahkan masalah.
sumber