好久以前遇到一些伺服器鬼故事,所以參考網路上的資料,弄了一個排程檢查系統服務的機制,配合上 crontab 可以使用。
原則上,這個做法和把程式 try / catch 包起來一樣,掩耳盜鈴的行徑。在沒有安全疑慮的狀況下,建議配合 log 確認系統紀錄,這樣可以保持穩定又可以找到系統問題,不失為一個權宜之計。
使用的環境是 CentOS7 / Linode VPS ,從指令上來看應該 debian 系列的也可以用才對。
操作上只要把 service 的變數替換為對應的服務名稱即可,以下是 mysql 檢查重啟的 code.
#!/bin/bash
PATH=/usr/sbin:/usr/bin:/sbin:/bin
service=mysql
if [[ ! "$(/usr/sbin/service $service status)" =~ "running" ]]
then
echo "`date "+%Y-%m-%d %H:%M:%S"` | [logadm [email protected]`date "+%Y%m%d%H%M%S"`] "
echo "$service is stop!!"
/usr/sbin/service $service start
else
echo "`date "+%Y-%m-%d %H:%M:%S"` | [logadm [email protected]`date "+%Y%m%d%H%M%S"`] "
echo "$service is running"
fi
同場加映,今天寫這篇時,網路上再找了一下,找到一些比較進階的檢查 code: