• 停电后,在UPS电源下服务器自动关机脚本


     一年总有那么几次莫明停电,公司的服务器经不起这样的折腾 
    写了一个断电后UPS备用电源自动关机的脚本 
    原理就是检测路由器网关是否能ping通,长时间持续ping不通视为停电了 
    路由器不要接到ups上 
    用法 
        1.检测网关是否持续ping不通300次(forever模式,添加到启动任务即可)  
          sudo ./ups_check forever 192.168.1.1 300 
       2.检测网关是否持续ping不通30次(once模式,需要配合crond使用) 
          sudo ./ups_check once 192.168.1.1 30 

    #!/bin/sh
     
    # halt command
    HALT=halt
     
    ping_forever_host(){
        IP=$1
        time_out=$2
        count=3
        kernel=`uname -s`
        total_miss=0
        echo "ups check host '${IP}' for (${time_out}) seconds, [forever mode]"
     
        # ping host, if miss recieved packets, then add to total_miss
        while true
        do
            case $kernel in
                VMkernel)            #esxi 5.1
                    ret=`ping -c ${count} -W 1 ${IP} 2>&1|grep 'packets transmitted'|sed 's/.*, (.*) packets received,.*/1/'`
                    ;;
                Darwin)            #MacOS X 10.7.4
                    ret=`ping -c ${count} -W 1 ${IP} 2>&1|grep 'packets transmitted'|sed 's/.*, (.*) packets received,.*/1/'`
                    ;;
                Linux)            #ubuntu 12.04
                    ret=`ping -c ${count} -W 1 ${IP} 2>&1|grep 'packets transmitted'|sed 's/.*, (.*) received,.*/1/'`
                    ;;
                *)
                    echo "Unknown Architecture $kernel"
                    exit 1
                    ;;
            esac
     
            miss=$((count-ret))
            if [ $miss -eq $count ]; then
                total_miss=$((total_miss+miss))
                echo "total_miss: ${total_miss} --> ${time_out}"
            else
                total_miss=0
            fi
             
            # if miss count over limit, then halt the computer!!!
            if [ $total_miss -ge $time_out ]; then
                echo "SYSTEM WILL HALT AT '`date`'!!!"
                ${HALT}
                break;
            fi
        done
    }
     
    ping_once_host(){
        IP=$1
        count=$2
        time_out=$2
        kernel=`uname -s`
        total_miss=0
        echo "ups check host '${IP}' for (${time_out}) seconds, [once mode]"
     
        # ping host, if miss recieved packets, then add to total_miss
        case $kernel in
            VMkernel)            #esxi 5.1
                ret=`ping -c ${count} -W 1 ${IP} 2>&1|grep 'packets transmitted'|sed 's/.*, (.*) packets received,.*/1/'`
                ;;
            Darwin)            #MacOS X 10.7.4
                ret=`ping -c ${count} -W 1 ${IP} 2>&1|grep 'packets transmitted'|sed 's/.*, (.*) packets received,.*/1/'`
                ;;
            Linux)            #ubuntu 12.04
                ret=`ping -c ${count} -W 1 ${IP} 2>&1|grep 'packets transmitted'|sed 's/.*, (.*) received,.*/1/'`
                ;;
            *)
                echo "Unknown Architecture $kernel"
                exit 1
                ;;
        esac
     
        miss=$((count-ret))
        if [ $miss -eq $count ]; then
            total_miss=$((total_miss+miss))
            echo "total_miss: ${total_miss} --> ${time_out}"
        else
            total_miss=0
        fi
         
        # if miss count over limit, then halt the computer!!!
        if [ $total_miss -ge $time_out ]; then
            echo "SYSTEM WILL HALT AT '`date`'!!!"
            ${HALT}
        fi
    }
     
    main(){
        action=$1;
        case $action in
            forever)            #run forever
                ping_forever_host $2 $3
                ;;
            once)               # run once
                ping_once_host $2 $3
                ;;
            *)
                echo "usage: sudo ./ups_check forever 192.168.2.1 120"
                echo "usage: sudo ./ups_check once 192.168.2.1 60"
                exit 1
                ;;
        esac
    }
     
    main $1 $2 $3
  • 相关阅读:
    SVN安装
    MS SQL Server 查询元数据
    MS SQL Server 时间函数
    Codeforces 666E Forensic Examination (后缀自动机 + 线段树合并)
    2020牛客暑期多校训练营(第八场) H Hard String Problem
    2020牛客暑期多校训练营(第四场) B Count New String
    2020牛客暑期多校训练营(第四场) A Ancient Distance
    2020杭电多校第三场 1007 Tokitsukaze and Rescue
    codeforces 1037H
    2020牛客暑期多校训练营(第三场) H Sort the Strings Revision
  • 原文地址:https://www.cnblogs.com/feixiablog/p/7146849.html
Copyright © 2020-2023  润新知