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

    django-filter https://github.com/carltongibson/django-filter https://django-filter.readthedocs.io/en ...

  2. STM32 Keil 软件仿真设置

    设置 Dialog.DLL 分别为:DARMSTM.DLL和TARMSTM.DLL, Parameter 均为:-pSTM32F103RC,用于设置支持芯片的软硬件仿真

  3. C:习题2

    C 语言中的数据类型主要有哪些? C 语言为什么要规定对所有用到的变量“先定义后使用”?这样做有什么好处? 1. 编译系统会根据定义为变量分配内存空间,分配空间的大小与数据类型有关 2. 系统可以根据 ...

  4. 牛客网挑战赛19 B,C,F

    链接:https://www.nowcoder.com/acm/contest/131/B来源:牛客网 矩阵 M 包含 R 行 C 列,第 i 行第 j 列的值为 Mi,j. 请寻找一个子矩阵,使得这 ...

  5. CF918C The Monster

    题目链接:http://codeforces.com/contest/918/problem/C 知识点: 贪心 解题思路: 枚举起点(当起点就是\(')'\)时直接跳过)并在此基础上遍历字符串,用一 ...

  6. 化学元素周期表的英文全称 Periodic Table of the Elements

    化学元素周期表的英文全称 Periodic Table of the Elements   缩写 PTE 拉丁文 英文 1 H 氢 Hydrogenium Hydrogen 2 He 氦 Helium ...

  7. 02 . Nginx平滑升级和虚拟主机

    Nginx虚拟主机 在真实的服务器环境,为了充分利用服务器资源,一台nginx web服务器会同时配置N个虚拟主机,这样可以充分利用服务器的资源,方便管理员的统一管理 配置nginx虚拟主机有三种方法 ...

  8. 爱奇艺|B站|优酷|腾讯视频高清无水印视频下载方法(软件工具教程)

    导读:经常在大型视频网站平台上看到一些很价值和视频,希望能高清无水印下载到本地学习观看,今天小程序定制开发代码哥DaiMaGe6给大家分享一招免费下载全网高清无水印视频的方法. 高清无水印视频下载工具 ...

  9. Rocket - diplomacy - IdRange

    https://mp.weixin.qq.com/s/qqL2XWqAhVcnGSxs6kxhLg   介绍IdRange的实现.   ​​   1. 基本定义   A non-empty half- ...

  10. Chisel3 - Tutorial - Adder

    https://mp.weixin.qq.com/s/SEcVjGRL1YloGlEPSoHr3A   位数为参数的加法器.通过FullAdder级联实现.   参考链接: https://githu ...