Linux服務(wù)是可以通過service命令進行控制的,這能使我們在給nginx主進程發(fā)送信號以及查看操作nginx服務(wù)更加得心應(yīng)手。在CentOS系統(tǒng)中,Service命令實際是調(diào)用/etc/init.d目錄下的shell腳本,也就是說,如下兩行命令其實等價的
#直接運行腳本
/etc/init.d/network restart
#通過service命令執(zhí)行腳本
service network restart
在上面的命令中,network是shell腳本的文件名,restart是傳遞給腳本的參數(shù)。因此將nginx添加到系統(tǒng)服務(wù)中,只需要在/etc/init.d中編寫一個文件名為nginx的shell腳本即可。
接下來執(zhí)行touch nginx創(chuàng)建一個腳本文件,使用vim /etc/init.d/nginx命令編寫一個shell腳本實現(xiàn)nginx服務(wù)管理,提供start stop reload restart status 5個參數(shù),具體的腳本代碼如下:
#! /bin/bash
#chkconfig:35 85 15
DAEMON=/usr/local/nginx/nginx
PID=/usr/local/nginx/nginx.pid
case "$1" in
start)
echo "Starting nginx daemon..."
$DAEMON && echo "SUCCESS" #開啟nginx
;;
stop)
echo "Stopping nginx daemon..."
$DAEMON -s quit && echo "SUCCESS" #從容的停止nginx
;;
reload)
echo "Reloading nginx daemon..."
$DAEMON -s reload && echo "SUCCESS" #平滑重啟nginx
;;
restart)
echo "Restarting nginx daemon..."
$DAEMON -s quit #從容的停止nginx
$DAEMON && echo "SUCCESS" #開啟nginx
;;
status)
if [ ! -f "$PID" ]; then #因為nginx啟動后會生成進程文件nginx.pid,這里通過判斷進程文件是否存在,判斷nginx是否啟動
echo "Nginx is not running..."
else
echo "Nginx is running..."
fi
;;
*)
echo "Usage:service nginx (start|stop|restart|reload|status)"
exit 2
;;
esac
代碼解釋:
#! /bin.bash:通常寫在shell腳本的開頭,需要使用特殊表示符號#!定義解釋此腳本的shell路徑。以上代碼的意思是這個腳本將使用bash環(huán)境執(zhí)行。
case語句:case語句通常用于多重分支語句匹配的情況,具體語法如下:
case $變量名 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
*)
默認執(zhí)行的命令序列
;;
esac
case語句必須以case開始 in結(jié)尾,中間的變量表示用戶輸入的字符,每個模式必須以右括號")"結(jié)束,雙分號";;"結(jié)束命令序列,且匹配模式中可以使用方括號表示一個連續(xù)的范圍,如[0-9],使用樹杠符號“|”表示“或”;最后的“*)”是默認模式,當(dāng)使用前面的各種模式均無法匹配該變量時,將執(zhí)行“*)”后的命令序列,最后case語句必須以esac結(jié)束。