zoukankan      html  css  js  c++  java
  • shell+crontab 实时服务进程监控重启

    #!/bin/sh
    #filename: checkProcess.sh
    #示例:每分钟检测httpd是否在运行,不在运行则重启
    #crontab -e
    # 加入:*/1 * * * * checkProcess.sh "httpd" "/etc/init.d/httpd start"
    #-------------------------------
    # 函数: checkProcess
    # 功能: 检查一个进程是否存在
    # 参数: $1 --- 要检查的进程名称(可以加入路径,增强唯一性)
    # 返回: 如果存在返回1, 否则返回0.
    #-------------------------------
    
    checkProcess()
    {
        # 检查输入的参数是否有效
        if [ "$1" = "" ]
        then
            return 0
        fi
         
        #$PROCESS_NUM获取指定进程名的数目(过滤文件名 checkProcess.sh)
        #【此处做了修订,加入grep -v "checkProcess.sh",对应修改IS_RUNNING_NUM=3 为 IS_RUNNING_NUM=1】
        PROCESS_NUM=`ps -ef | grep "$1" | grep -v "grep" | grep -v "checkProcess.sh" | wc -l`
         
        #判断进程正在运行的数量
        IS_RUNNING_NUM=1
         
        echo "Current Process num:$PROCESS_NUM"
         
        #实际进程数PROCESS_NUM小于判断为运行中的数IS_RUNNING_NUM,表示有错误,需要重新启动
        if [ $PROCESS_NUM -lt $IS_RUNNING_NUM ];
        then
            return 0
        else
            return 1
        fi
    }
     
    #如果参数1或者参数2为空,提示用法
    if [ -z "$1" -o -z "$2" ]
    then
        echo "Usage: checkProcess.sh process execCommand"
        echo 'Example: checkProcess.sh "httpd" "/etc/init.d/httpd start"'
        exit
    fi
     
    # 检查test实例是否已经存在
    # checkProcess.sh "httpd" "/etc/init.d/httpd start"
    checkProcess $1
    checkResult=$?
    if [ $checkResult -eq 0 ];
    then
        # 杀死所有test进程,可换任意你需要执行的操作
        killall -9 $1
        echo "Now execute: $2"
        # 在后台执行程序
        exec $2 &
    else
        echo "Process is running"
    fi
    
    
    
    crontab示例
    #启动apache服务
    */1 * * * * /root/shell/checkProcess.sh "/usr/sbin/httpd" "/root/shell/httpdstart.sh"
    #启动mysql服务
    */1 * * * * /root/shell/checkProcess.sh "/usr/sbin/mysqld" "/root/shell/mysqldstart.sh"
    这里为了方便(有些服务的启动命令比较长),把启动代码封装进了shell脚本中,读者可以直接写启动命令
    
    httpdstart.sh脚本如下:
    #!/bin/bash
    /usr/sbin/httpd -k start
  • 相关阅读:
    java多线程-阻塞队列BlockingQueue
    java多线程-ThreadLocal
    JZ-C-26
    JZ-C-25
    JZ-C-24
    JZ-C-23
    JZ-C-22
    JZ-C-21
    JZ-C-20
    JZ-C-19
  • 原文地址:https://www.cnblogs.com/kcxg/p/10481488.html
Copyright © 2011-2022 走看看