一年总有那么几次莫明停电,公司的服务器经不起这样的折腾 
写了一个断电后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

停电后,在UPS电源下服务器自动关机脚本的更多相关文章

  1. UPS电源效果及有关名词解析

    UPSuninterruptpowersystem缩写,4.工频机和高频机<工频机UPS选用工频变压器作为整流器和逆变器的部件的UPS电源:高频机是以高频开关元件代替整流器和逆变器中粗笨的工频变 ...

  2. UPS电源运用在数据中心,有什么优势?

    UPS电源是每个数据中心为了保证服务器与计算设备不被电力线干扰与电能质量问题所影响的设备. 1.电源选择 运用在线式或是后备式UPS电源,均需依照微机设备的需求与经济条件所决定.若是经济条件相对较好, ...

  3. 解决windows server 2008r2服务器自动关机

    问题 具体表现就是系统自动关机,网上说是开机后2小时就会自动关机 系统版本: 解决 PsTools下载 解压:PSTools.zipg,如解压到C:\PSTools目录下 执行如下命令,打开注册表 W ...

  4. MySQL数据库InnoDB引擎下服务器断电数据恢复

    说明: 线上的一台MySQL数据库服务器突然断电,造成系统故障无法启动,重新安装系统后,找到之前的MySQL数据库文件夹. 问题: 通过复制文件的方式对之前的MySQL数据库进行恢复,发现在程序调用时 ...

  5. C#实现.Net对邮件进行DKIM签名和验证,支持附件,发送邮件签名后直接投递到对方服务器(无需己方邮件服务器)

    项目地址 https://github.com/xiangyuecn/DKIM-Smtp-csharp 主要支持 对邮件进行DKIM签名,支持带附件 对整个邮件内容(.eml文件)的DKIM签名进行验 ...

  6. SQL Server Alwayson架构下 服务器 各虚拟IP漂移监控告警的功能实现 -2(虚拟IP视角)

    1.需求描述 我们知道Windows Cluster 都是多节点的,当虚拟IP漂移的时候,一般都是从一个节点漂移到另外一个节点.如果可以及时捕捉到旧节点信息是什么.新节点信息是什么对我们提供高可用的数 ...

  7. 在CentOS(Linux)下用TomCat部署完java项目后,在Windows下可以访问8080,但无法通过输入页面名.jsp进入页面

    错误描述:今天第一次在linux下部署项目,写了个测试的项目,在CentOS下放行8080端口后,在Windows下可以访问8080,出现TomCat的欢迎页面,但想要进入某一个静态的jsp页面显示找 ...

  8. eclipse安装ADT后在windows菜单下找不到android SDK and AVD Manager

    eclipse安装ADT后在windows菜单下找不到android SDK and AVD Manager选项的解决办法 - zhjr1220的专栏 - 博客频道 - CSDN.NET  http: ...

  9. [置顶] Android下实现自动关机的方法总结

    最近在网上看了一些Android下实现自动关机的方法,有的不行,有的只适用一些机型,有的适用于大部分机型,笔者在此总结一下 法一: Intent newIntent = new Intent(Inte ...

随机推荐

  1. scrapy五大核心组件

    scrapy五大核心组件 引擎(Scrapy)用来处理整个系统的数据流处理, 触发事务(框架核心) 调度器(Scheduler)用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. ...

  2. 关于MySQL数据被删除后空间重用的问题实验

    以前知道,MySQL在通过delete语句删除数据后,空间并不会被腾出,而只是在数据文件中被标记为已删除,除非执行optimize table.前两天听说,虽然delete数据后硬盘空间不会被腾出,但 ...

  3. Webconfig配置刷新时间,前台页面调用这个时间

    <configuration> <appSettings> <add key="webpages:Version" value="2.0.0 ...

  4. 关于php中数据提交到当前页面action的问题

    关于php中数据提交到当前页面action的问题 2011-06-21 17:45杨超★杰伦 | 分类:PHP | 浏览695次 php中数据提交到当前页面,有人action=“<?php ec ...

  5. oracle [精华] 你是否仍迷信rowid分页?

    http://www.itpub.net/thread-1603830-1-1.html

  6. 蓝桥杯 试题 历届试题 对局匹配 DP解决

    问题描述 小明喜欢在一个围棋网站上找别人在线对弈.这个网站上所有注册用户都有一个积分,代表他的围棋水平. 小明发现网站的自动对局系统在匹配对手时,只会将积分差恰好是K的两名用户匹配在一起.如果两人分差 ...

  7. poi 针对word模板内容替换

    最近多了一个需求,需要对word模板内容进行替换,一开始用的是word03版的,替换起来比较简单,主要是range对像替换非常方便,而且可以保留替换前的字体样式. InputStream is = n ...

  8. vc程序设计-----位图

    // resource_study.cpp : 定义应用程序的入口点. // #include "framework.h" #include "resource_stud ...

  9. js 识别二维码

    本文引用analyticCode.js.llqrcode.js实现识别二维码功能 html代码: <div class="box" id="analytic&quo ...

  10. Java实现 LeetCode 797 所有可能的路径 (DFS)

    797. 所有可能的路径 给一个有 n 个结点的有向无环图,找到所有从 0 到 n-1 的路径并输出(不要求按顺序) 二维数组的第 i 个数组中的单元都表示有向图中 i 号结点所能到达的下一些结点(译 ...