因为有些服务自身原因,经常会异常退出。如果每次异常退出后都要进入系统,略微。。。
还是写脚本解决,如果一个服务一个脚本也略微.。。于是考虑加入一个文本文件,记录需要监控各项服务。文本文件格式如下:
- 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即可