前言
nginx 服務(wù)啟動后,我們需要對其服務(wù)狀態(tài)進(jìn)行監(jiān)控,今天學(xué)習(xí)過程中了解到一段非常有用的小腳本,不僅可以監(jiān)控Nginx,也可以用來監(jiān)控其他服務(wù)
腳本
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
腳本解析
ps -C nginx –no-header
這里涉及ps 的用法,我們一般用ps查看相關(guān)進(jìn)程,一般都是用
ps -ef | grep XX 或 ps -aux| grep XX 的模式
如下:
[root@bogon ~]# ps -ef | grep nginx
root 2248 1 0 19:13 ? 00:00:00 nginx: master process ./nginx
nobody 3265 2248 0 20:16 ? 00:00:00 nginx: worker process
root 4791 4742 0 22:05 pts/1 00:00:00 grep --color=auto nginx
但是這樣通常都會覆蓋一個grep的進(jìn)程
我們可以用ps -C 或ps -c 的方式, -C 后面接命令的名字 ,如下:
[root@bogon ~]# ps -C nginx
PID TTY TIME CMD
4983 ? 00:00:00 nginx
4984 ? 00:00:00 nginx
--no-header 就是去挑title,如下:
[root@bogon ~]# ps -C nginx --no-header
4983 ? 00:00:00 nginx
4984 ? 00:00:00 nginx
wc -l 這個很熟悉了,行數(shù)計算
所以用這種方式可判斷,如果
ps -C nginx --no-header|wc -l
如果值為0,即代表服務(wù)未啟動
如果值為非0,即代表服務(wù)已啟動
還有一個知識點,killall keepalived 這個是以服務(wù)名稱殺死進(jìn)程,日常中也用的挺多的
舉一反三
上面那段完整的腳本意思即為:
判斷nginx 服務(wù)是否啟動
如果未啟動,執(zhí)行啟動命令
再次判斷,如果啟動失敗,關(guān)掉keepalived,進(jìn)入從節(jié)點
關(guān)于Nginx的主從我們后面會實操后記錄
最重要的一點是,這段腳本不僅可以用來監(jiān)控Nginx,其他服務(wù)也是可以的,模式是一樣的,大家可以自行試試