起因
輕量型服務器跑不了docker
享受不到restart的便利
某個服務掛了只能手動重啟
很麻煩
解決方案
利用crontab定時執(zhí)行【哨兵腳本】猴伶,若進程不在荧库,則執(zhí)行【啟動腳本】
必備知識
crontab
Linux crontab 是用來定期執(zhí)行程序的命令柜砾。
格式
f1 f2 f3 f4 f5 (env) program (output)
- f1 是表示分鐘
- f2 表示小時
- f3 表示一個月份中的第幾日
- f4 表示月份
- f5 表示一個星期中的第幾天
- env(選填)使環(huán)境變量生效
- program 表示要執(zhí)行的程序
- output(選填)處理日志輸出和執(zhí)行郵件
實例
* * * * * /bin/ls 每一分鐘執(zhí)行一次 /bin/ls
0 */2 * * * /sbin/service httpd restart 每兩個小時重啟一次apache
50 22 * * * /sbin/service sshd stop 每天22:50關閉ssh服務
環(huán)境變量
部分指令如docker、mongod等驶赏,均將其文件路徑配置到PATH
若未添加下述命令,則cron無法通過環(huán)境變量PATH找到這些指令所在位置
在 /etc/crontab 中添加環(huán)境變量既鞠,在可執(zhí)行命令之前添加命令 . /etc/profile;/bin/sh煤傍,使得環(huán)境變量生效,例如:
* * * * * . /etc/profile;/bin/sh /srv/mongo/bin/sentinel.sh
日志輸出及郵件
當程序在你所指定的時間執(zhí)行后嘱蛋,系統(tǒng)會發(fā)一封郵件給當前的用戶蚯姆,顯示該程序執(zhí)行的內容
You have new mail in /var/spool/mail/root
若是你不希望收到這樣的郵件,請在每一行空一格之后加上 > /dev/null 2>&1 即可洒敏,如:
* * * * * . /etc/profile;/bin/sh /srv/mongo/bin/sentinel.sh > /dev/null 2>&1
當然也可以將每條 crontab中的任務增加自己的日志龄恋,有利于查找執(zhí)行失敗原因
以下是把錯誤輸出和標準輸出都輸出到sentinel.log中
* * * * * . /etc/profile;/bin/sh /srv/mongo/bin/sentinel.sh >> /root/for_crontab/sentinel.log 2>&1
注意:單個右角符號【>】是覆寫文件,會覆蓋之前的內容桐玻;
雙右角符號【>>】是續(xù)寫文件篙挽,會在文件結尾繼續(xù)寫入新的內容。
相關指令
執(zhí)行文字編輯器來設定時程表
crontab -e
列出目前的時程表
crontab -l
日志查詢
cron輸出日志默認在/var/log/cron
tail -200f /var/log/cron
哨兵腳本
完整示例:
#!/bin/bash
# 聲明一個變量镊靴,記錄mongodb存活的進程數(shù)量
mongoCount=`ps -ef|grep mongodb|grep -v grep| wc -l`
if [ $mongoCount -eq 0 ];
then
# 如果mongodb進程數(shù)量為0 則執(zhí)行【啟動腳本】
echo "mongodb is down!"
/srv/mongo/bin/startup.sh
else
# 如果mongodb進程數(shù)量不為0铣卡,則認為進程存活,echo后無需其他操作
echo "mongodb is running!"
fi
指令解釋
- 查詢當前進程偏竟,并過濾保留關鍵字[mongod]
ps -ef|grep mongod
[root@5kdj7 bin]# ps -ef|grep mongod
root 8321 1 20 14:38 ? 00:00:01 mongod -f /srv/mongo/mongodb.conf
root 8383 24959 0 14:38 pts/0 00:00:00 grep --color=auto mongod
- 查詢當前進程煮落,并過濾保留關鍵字[mongod],并過濾去除關鍵字[grep]
ps -ef|grep mongod|grep -v grep
[root@5kdj7 ~]# ps -ef|grep mongod|grep -v grep
root 9706 1 0 14:49 ? 00:00:07 mongod -f /srv/mongo/mongodb.conf
- 查詢當前進程踊谋,并過濾保留關鍵字[mongod]蝉仇,并過濾去除關鍵字[grep],并進行單詞計數(shù)(word count),-l 參數(shù)表示統(tǒng)計行數(shù)轿衔。
ps -ef|grep mongod|grep -v grep| wc -l
[root@5kdj7 ~]# ps -ef|grep mongod|grep -v grep| wc -l
1