停电后,在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
停电后,在UPS电源下服务器自动关机脚本的更多相关文章
- UPS电源效果及有关名词解析
UPSuninterruptpowersystem缩写,4.工频机和高频机<工频机UPS选用工频变压器作为整流器和逆变器的部件的UPS电源:高频机是以高频开关元件代替整流器和逆变器中粗笨的工频变 ...
- UPS电源运用在数据中心,有什么优势?
UPS电源是每个数据中心为了保证服务器与计算设备不被电力线干扰与电能质量问题所影响的设备. 1.电源选择 运用在线式或是后备式UPS电源,均需依照微机设备的需求与经济条件所决定.若是经济条件相对较好, ...
- 解决windows server 2008r2服务器自动关机
问题 具体表现就是系统自动关机,网上说是开机后2小时就会自动关机 系统版本: 解决 PsTools下载 解压:PSTools.zipg,如解压到C:\PSTools目录下 执行如下命令,打开注册表 W ...
- MySQL数据库InnoDB引擎下服务器断电数据恢复
说明: 线上的一台MySQL数据库服务器突然断电,造成系统故障无法启动,重新安装系统后,找到之前的MySQL数据库文件夹. 问题: 通过复制文件的方式对之前的MySQL数据库进行恢复,发现在程序调用时 ...
- C#实现.Net对邮件进行DKIM签名和验证,支持附件,发送邮件签名后直接投递到对方服务器(无需己方邮件服务器)
项目地址 https://github.com/xiangyuecn/DKIM-Smtp-csharp 主要支持 对邮件进行DKIM签名,支持带附件 对整个邮件内容(.eml文件)的DKIM签名进行验 ...
- SQL Server Alwayson架构下 服务器 各虚拟IP漂移监控告警的功能实现 -2(虚拟IP视角)
1.需求描述 我们知道Windows Cluster 都是多节点的,当虚拟IP漂移的时候,一般都是从一个节点漂移到另外一个节点.如果可以及时捕捉到旧节点信息是什么.新节点信息是什么对我们提供高可用的数 ...
- 在CentOS(Linux)下用TomCat部署完java项目后,在Windows下可以访问8080,但无法通过输入页面名.jsp进入页面
错误描述:今天第一次在linux下部署项目,写了个测试的项目,在CentOS下放行8080端口后,在Windows下可以访问8080,出现TomCat的欢迎页面,但想要进入某一个静态的jsp页面显示找 ...
- eclipse安装ADT后在windows菜单下找不到android SDK and AVD Manager
eclipse安装ADT后在windows菜单下找不到android SDK and AVD Manager选项的解决办法 - zhjr1220的专栏 - 博客频道 - CSDN.NET http: ...
- [置顶] Android下实现自动关机的方法总结
最近在网上看了一些Android下实现自动关机的方法,有的不行,有的只适用一些机型,有的适用于大部分机型,笔者在此总结一下 法一: Intent newIntent = new Intent(Inte ...
随机推荐
- Java并发编程详解读书笔记(一)
一.线程介绍 讲线程之前得先了解进程(Peocess),现在的操作系统基本都支持多任务的进行,举个场景:有许多的程序员们喜欢边coding边听点轻音乐.这时计算机就是做并行任务,也就是有多个进程在同时 ...
- JAVA基础4---序列化和反序列化深入整理(JDK序列化)
一.什么是序列化和反序列化? 序列化:将对象状态信息转化成可以存储或传输的形式的过程(Java中就是将对象转化成字节序列的过程) 反序列化:从存储文件中恢复对象的过程(Java中就是通过字节序列转化成 ...
- 解决CentOS无法识别网卡问题
在联想电脑安装CentOS 6.9系统的时候,出现了无法上网问题,记录下这一路的坑. CentOS安装时在设置主机名这一步的下方有配置网络按钮,而此时该按钮点击无效.进入系统后发现没有网络连接. 在终 ...
- BZOJ 1050并查集+贪心
1050: [HAOI2006]旅行comf Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3333 Solved: 1851[Submit][St ...
- BZOJ1077 并查集
1077: [SCOI2008]天平 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 416 Solved: 224[Submit][Status][ ...
- LightOJ1197
题目链接:https://vjudge.net/problem/LightOJ-1197 题目大意: 给你 a 和 b (1 ≤ a ≤ b < 231, b - a ≤ 100000),求出 ...
- 解决使用IDEA启动Tomcat成功但localhost:8080无法访问的问题
解决使用IDEA启动Tomcat成功但localhost:8080无法访问的问题
- G1 垃圾回收器简单调优
G1: Garbage First 低延迟.服务侧分代垃圾回收器. 详细介绍参见:JVM之G1收集器,这里不再赘述. 关于调优目标:延迟.吞吐量 一.延迟,单次的延迟 单次的延迟关系到服务的响应时延, ...
- 四、Spring-面向切面编程
内容 面向切面编程基本原理 通过POJO创建切面 使用@AspectJ注解 为AspectJ切面注入依赖 关键词 横切关注点(cross-cutting concern) 继承 (inheritanc ...
- C# 数据操作系列 - 19 FreeSql 入坑介绍
0. 前言 前几天FreeSql的作者向我推荐了FreeSql框架,想让我帮忙写个文章介绍一下.嗯,想不到我也能带个货了.哈哈,开个玩笑-看了下觉得设计的挺有意思的,所以就谢了这篇文章. 简单介绍一下 ...