• 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
  • 相关阅读:
    【模板】2-SAT 问题
    HDU5875 Function
    Codeforces Round #380 (Div. 2)/729B Spotlights 水题
    Codeforces Round #380 (Div. 2)/729E Subordinates 贪心
    Codeforces Round #380 (Div. 2)/729D Sea Battle 思维题
    HDU 5869 Different GCD Subarray Query 树状数组+离线
    HDU 5696 区间的价值 暴力DFS
    HDU 5876 Sparse Graph BFS+set删点
    HDU 5868 Different Circle Permutation Burnside引理+矩阵快速幂+逆元
    HDU 5800 To My Girlfriend DP
  • 原文地址:https://www.cnblogs.com/kcxg/p/10481488.html
Copyright © 2020-2023  润新知