因为有些服务自身原因,经常会异常退出。如果每次异常退出后都要进入系统,略微。。。

    还是写脚本解决,如果一个服务一个脚本也略微.。。于是考虑加入一个文本文件,记录需要监控各项服务。文本文件格式如下:

   
   
   
   
  1. service_name:absolute_path:start_service 
  2. service_name->即为服务名称,如mysqld,named 
  3. absolute_path->对于有些自己做的并不是很完善的程序,在bash后台运行的情况下,默认目录为根,为满足程序中的相关文件引用,需要先切换到程序根目录 
  4. start_service:即为启动程序的方法,如mysqld可以用“service mysqld start",其他程序依情况而定,如有的紧紧是"service_name &" 

   当然为了日后查看需要,加入日志功能,日志格式为:

   
   
   
   
  1. SERVICE: [service_name] AT [start_time] START 

   脚本如下:

   
   
   
   
  1. #!/bin/bash 
  2. #File: ServiceMonitor.sh 
  3. #Auth: Robin 
  4. #Date: 2012/07/30 10-11-10 
  5. #Desc: monitor service which is writen on sm.conf 
  6. #Vers: 1.0 
  7. # 
  8. CONF="/etc/sm.conf" 
  9. LOGF="/var/log/sm.log" 
  10.  
  11. function LOG() { 
  12.     local Ser=$1 
  13.     local Data=`date +"%Y/%m/%d %H:%M"
  14.     echo "SERVICE: [$Ser] AT [$Data] START" >> $LOGF 
  15.  
  16. function IFEXIST() { 
  17.     local Ser=$1 
  18.     ps -ef | grep -w $1 |grep -v grep &> /dev/null 
  19.     flag=$? 
  20.  
  21. function IFSTART() { 
  22.     local Ser=$3 
  23.     local flag=$1 
  24.     local Com=$2 
  25.     local Pat=$4 
  26.     if [ $flag -eq 1 ];then 
  27.         if [[  -n $Pat ]];then 
  28.             cd $Pat 
  29.         fi 
  30.         $Com 
  31.  LOG $Ser 
  32.     fi 
  33.  
  34. function MAIN() { 
  35.     while read LINE;do 
  36.         local Ser=`echo $LINE|cut -d: -f1` 
  37.         local Pat=`echo $LINE|cut -d: -f2` 
  38.         local Com=`echo $LINE|cut -d: -f3` 
  39.         IFEXIST "$Ser" 
  40.         IFSTART "$flag" "$Com" "$Ser" "$Pat" 
  41.     done < $CONF 
  42.  
  43. MAIN 

   最后只需按自己需要,加入crontab即可