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

    一.写配置寄存器步骤及函数封装 写配置寄存器 1.把CSB拉低至低电平: 2.发送WRCFG命令(0x00 0x01)及其PEC(0x3D 0x6E): 3.发送配置寄存器的CFGR0字节,然后继续发 ...

  2. mysql基础1:yum安装mysql

    1.下载yum源并安装http://dev.mysql.com/downloads/repo/yum/.wget https://dev.mysql.com/get/mysql57-community ...

  3. 简述 zookeeper 基于 Zab 协议实现选主及事务提交

    Zab 协议:zookeeper 基于 Paxos 协议的改进协议 zookeeper atomic broadcast 原子广播协议. zookeeper 基于 Zab 协议实现选主及事务提交. 一 ...

  4. 【持续更新】springboot相关配置

    @Configuration public class MyWebMvcConfig implements WebMvcConfigurer { //注册了新的访问路径 @Override publi ...

  5. C语言数据类型整理

    基本类型: 它们是算术类型,包括两种类型:整数类型和浮点类型. 枚举类型: 它们也是算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变量. void 类型: 类型说明符 void 表明没有可用 ...

  6. Docker虚拟机配置手札(centos)

    一.Docker只支持CentOS7及以上系统,不支持6.x系统 二.yum安装Docker 1.安装相关环境和设置仓库 yum install -y yum-utils device-mapper- ...

  7. 人机协同与AI能力训练

    我们进行<中台战略>一书的第三期分享. “人机融合是解决aI机器人冷启动的绝佳解决方案,我们这里引入了一个应答满意度的指标,每一个咨询应答都对应一个应答满意度.当消费者应该回答选择转入人工 ...

  8. [安卓基础] 007.管理Activity的生命周期

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  9. AVIRIS反射率数据简介

    Surface Reflectance 高光谱图像 ↑ AVIRIS高光谱成像光谱仪采集得到的原始图像为辐亮度图像,经过校正后的L1级产品为地表辐亮度信息.但是许多时候,我们更希望知道地面目标物的反射 ...

  10. 【HBase】 常用命令

    创建表 hbase(main):006:0> create 'goods_zc','type' 0 row(s) in 1.3090 seconds => Hbase::Table - g ...