ESXi加UPS断电自动关机脚本

被电力局搞怕了,随时都可以停电,并且没有通知!今年已经好几次了!
怀疑我的硬盘就是这样坏的.
随后败了一台 UPS,APC 的 BX550CI-CN,就这个样子

没有 USB 接口,服务器不能知晓是否 UPS 在供电(就算有,ESXi 也用不上,尴尬)

写了一个小脚本,让 ESXi 来 ping 网关(路由器,插市电),如果网关 3 分钟都是失联状态,就判断停电了,自动执行关机命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/sh
while
ping -c 1 10.1.1.1 > /dev/null
[ $? -eq 0 ];
do
#echo ' AC Power OK ! ' >> /vmfs/volumes/磁盘名/ups/ups.log;date >> /vmfs/volumes/磁盘名/ups/ups.log
sleep 180
done
echo ' AC Power maybe off, checking again after 3 minutes ! ' >> /vmfs/volumes/磁盘名/ups/ups.log;date >> /vmfs/volumes/磁盘名/ups/ups.log
sleep 60
ping -c 1 10.1.1.1 > /dev/null
if [ $? -eq 0 ]
then
echo ' Checkagain, AC Power OK ! ' >> /vmfs/volumes/磁盘名/ups/ups.log;date >> /vmfs/volumes/磁盘名/ups/ups.log
else
echo ' AC Power is already off, shut down NAS Now! ' >> /vmfs/volumes/磁盘名/ups/ups.log;date >> /vmfs/volumes/磁盘名/ups/ups.log
/bin/shutdown.sh
halt
fi

以上代码保存成apc.sh放到/vmfs/volumes/磁盘名/ups/目录下,目录下同时创建ups.log空白日志文件

然后再写一个守护

1
2
3
4
5
6
7
8
9
10
#! /bin/sh
# 用ps获取ups进程数量
NUM=`ps -c | grep apc.sh | grep -v grep |wc -l`
echo ${NUM}
# 少于1,重启进程
if [ "${NUM}" -lt "1" ];then
/vmfs/volumes/磁盘名/ups/apc.sh &
echo ' UPS shouhu start' >> /vmfs/volumes/磁盘名/ups/ups.log;date >> /vmfs/volumes/磁盘名/ups/ups.log
fi
exit 0

守护脚本保存成ups_shouhu.sh也放到/vmfs/volumes/磁盘名/ups/目录下

然后添加一个计划任务,每三分钟执行守护脚本
由于 ESXi 重启会重置计划任务的内容,所以添加到启动

/etc/rc.local.d/local.sh文件里添加

1
2
3
4
/bin/kill $(cat /var/run/crond.pid)
/bin/echo '*/3 * * * * /vmfs/volumes/磁盘名/ups/ups_shouhu.sh' >> /var/spool/cron/crontabs/root
/bin/crond
exit 0

然后就有了一台会自动关机的 GEN8 了,麻麻再也不用担心异常停电了~

—————华丽的分割线—————
下面记录一下自动开机,如果路由器发现服务器不在线,就执行 wol 唤醒服务器

路由器创建一个计划任务,每三分钟执行

1
2
3
4
5
6
7
#Power for Gen8
ping -c 10 -w 10.1.1.2 > /dev/null
ret=$?
if [ $ret -ne 0 ]
then
ether-wake XX:XX:XX:XX:XX:XX
fi

自动关机,自动开机,都搞定:smile:

参考了不少大神的代码,我都忘记来源了,没办法一一列上,见谅


ESXi加UPS断电自动关机脚本
https://cuojue.org/read/esxi_apc_ups.html
作者
WeiCN
发布于
2017年1月5日
许可协议