因爲有些服務自身原因,經常會異常退出。如果每次異常退出後都要進入系統,略微。。。
還是寫腳本解決,如果一個服務一個腳本也略微.。。於是考慮加入一個文本文件,記錄需要監控各項服務。文本文件格式如下:
- service_name:absolute_path:start_service
- service_name->即爲服務名稱,如mysqld,named
- absolute_path->對於有些自己做的並不是很完善的程序,在bash後臺運行的情況下,默認目錄爲根,爲滿足程序中的相關文件引用,需要先切換到程序根目錄
- start_service:即爲啓動程序的方法,如mysqld可以用“service mysqld start",其他程序依情況而定,如有的緊緊是"service_name &"
當然爲了日後查看需要,加入日誌功能,日誌格式爲:
- SERVICE: [service_name] AT [start_time] START
腳本如下:
- #!/bin/bash
- #File: ServiceMonitor.sh
- #Auth: Robin
- #Date: 2012/07/30 10-11-10
- #Desc: monitor service which is writen on sm.conf
- #Vers: 1.0
- #
- CONF="/etc/sm.conf"
- LOGF="/var/log/sm.log"
- function LOG() {
- local Ser=$1
- local Data=`date +"%Y/%m/%d %H:%M"`
- echo "SERVICE: [$Ser] AT [$Data] START" >> $LOGF
- }
- function IFEXIST() {
- local Ser=$1
- ps -ef | grep -w $1 |grep -v grep &> /dev/null
- flag=$?
- }
- function IFSTART() {
- local Ser=$3
- local flag=$1
- local Com=$2
- local Pat=$4
- if [ $flag -eq 1 ];then
- if [[ -n $Pat ]];then
- cd $Pat
- fi
- $Com
- LOG $Ser
- fi
- }
- function MAIN() {
- while read LINE;do
- local Ser=`echo $LINE|cut -d: -f1`
- local Pat=`echo $LINE|cut -d: -f2`
- local Com=`echo $LINE|cut -d: -f3`
- IFEXIST "$Ser"
- IFSTART "$flag" "$Com" "$Ser" "$Pat"
- done < $CONF
- }
- MAIN
最後只需按自己需要,加入crontab即可