ESXi加UPS断电自动关机脚本

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

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

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

#!/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空白日志文件

然后再写一个守护

#! /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文件里添加

/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唤醒服务器

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

#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

自动关机,自动开机,都搞定icon_smile.gif

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

Last modification:January 5th, 2017 at 03:24 pm

12 comments

  1. 高进

    你好。博主。根据你的代码可以实现关机了。关于多IP,PING的话怎么设置呢。怕一个IP间歇性断电或无法连接。

    1. WeiCN
      @高进

      因为ping的是内网,所以没有考虑多个IP,也不存在IP间歇不通。
      如果要同时那你只能在脚本里面继续加if then了,不是设置
      写这篇文章的时候,我应该用的是网件R7000路由刷的番茄系统
      另外我现在已经不用ESXi了,资料丢了一次,现在换用win2016了

    2. 高进
      @高进

      另外楼主路由是用什么路由呢.EDGEMAX能实现吗

  2. ahfncj

    如果买带USB的UPS是否可以让esxi自动关机呢

  3. 夕凉

    冒泡一波 icon_smile.gif

  4. 日后再说

    谢谢博主,我测试应该没问题,我还没有测试关机,请问执行/bin/shutdown.sh他是会按照我设置的关机顺序关机吗?如果我的虚拟机里面有很多linux系统,没有安装tools他应该可以强制断电吧

  5. john

    博主,我照着你这个方案在esxi 6.0上做了一遍。
    但是并没有用。
    看了一下守护脚本起不来。
    手动运行apc.sh是可以达到自动关机的效果的。
    我猜是local.sh那里有点问题。

    1. WeiCN
      @john

      那你在log里可以看到守护的启动信息吗?

      1. john
        @WeiCN

        看不到的。
        我不手动启动apc.sh的话日志就一直是空的。
        手动启动以后,并且把网关断电以后会有日志记录。
        AC Power maybe off, checking again after 3 minutes !
        Fri Apr 14 14:06:28 UTC 2017
        AC Power is already off, shut down NAS Now!
        Fri Apr 14 14:07:39 UTC 2017

        但是没有守护启动的信息。

        1. WeiCN
          @john

          /bin/echo '/3 * /vmfs/volumes/磁盘名/ups/ups_shouhu.sh' >> /var/spool/cron/crontabs/root

          这个是一行,可能是网页上被换行了,你重新编辑一下

          1. john
            @WeiCN

            试了一下,还是不行。
            日志文件还是没有记录。
            守护脚本起不来。

          2. john
            @WeiCN

            OK,我试试看,晚点给结果。

Leave a Comment