普通UPS与ESXi联动 实现断电自动关机

高级的UPS可以与ESXi系统实现联动完成断电关机

如果UPS的联动软件只支持Windows可以开一个Windows虚拟机实现虚拟机控制宿主机关机,变相实现联动关机。

如果普通UPS不支持系统联动

只能采用曲线救国的方案:当主机Ping不通路由的时候说明路由已经断电,判断为市电已断(路由未接入UPS)

实现方法

开启 ESXi 的 SSH 服务,通过 SSH 在数据盘新建一个脚本文件,比如 /vmfs/volumes/esxi-os/UPS/shutdown.sh,内容如下:

#!/bin/sh
ping -c 1 192.168.3.1 > /dev/null
ret=$?
if [ $ret -eq 0 ]
    then
    echo 'AC Power OK!'
    else
    echo 'AC Power maybe off,checking again after 150 seconds!'
    sleep 150
    ping -c 1 192.168.3.1 > /dev/null
    ret=$?
    if [ $ret -eq 0 ]
        then
        echo 'AC Power OK!'
        else
        echo 'AC Power maybe off,checking again after 100 seconds!'
        sleep 100
        ping -c 1 192.168.3.1 > /dev/null
        ret=$?
        if [ $ret -eq 0 ]
            then
            echo 'AC Power OK!'
            else
            echo 'AC Power off, shutdown esxi-server!'
            /sbin/poweroff
        fi
    fi
fi

为了防止路由器升级重启,或者整理网线导致网线插拔短暂的断网情况,脚本在第一次ping不通之后过150秒继续ping,依然不通再等100秒继续ping,如果还是不通就会进行关机操作

给脚本添加执行权限

chmod 777 /vmfs/volumes/esxi-os/UPS/shutdown.sh

或者

chmod +x /vmfs/volumes/esxi-os/UPS/shutdown.sh

添加一个计划任务,每1分钟执行脚本,由于 ESXi重启后会重置计划任务,所以需要通过修改 /etc/rc.local.d/local.sh文件,实现每次开机时自动添加计划任务
编辑/etc/rc.local.d/local.sh,在 exit 0 前面添加:

/bin/kill $(cat /var/run/crond.pid)
/bin/echo '*/1 * * * * /vmfs/volumes/esxi-os/UPS/shutdown.sh' >> /var/spool/cron/crontabs/root
/bin/crond

可以自行修改脚本重复执行时间