虚拟机添加usb设备,选择ups的usb,并在虚拟机中安装配套的ups软件,设置断电自动关机,比如10分钟。
如果主板支持通电开机,ups虚拟机还需要设置自动启动,时间和顺序自行掌控。
所有虚拟机尽量安装vmtools,调用系统的关机,而不是关闭电源。
系统-自动启动,配置安装了vmtools的虚拟机,停止操作设置为关机,等待信号检测:是。

#列出所有虚拟机
vim-cmd vmsvc/getallvms
#以下为参考 ups.sh 酌情修改
#正常关机
vim-cmd vmsvc/power.shutdown vmid
#关闭电源
vim-cmd vmsvc/power.off vmid
cd vmfs/volumes/datastore1
mkdir sh
vi ups.sh

ups.sh
10.10.10.13改为自己的虚拟机IP,sleep 改为合适的数值。
示例:断电10分钟后虚拟机关机,第一次ping虚拟机IP检测失败,5分钟后再次检测,如果再次检测失败,esxi关机。

#!/bin/sh
while
ping -c 1 10.10.10.13 > /dev/null
[ $? -eq 0 ]; 
do
 
    echo 'AC Power OK !' >> /vmfs/volumes/datastore1/sh/ups.log;date >> /vmfs/volumes/datastore1/sh/ups.log
 
    sleep 60
 
done

echo 'AC Power maybe off, checking again after 5 minutes !' >> /vmfs/volumes/datastore1/sh/ups.log;date >> /vmfs/volumes/datastore1/sh/ups.log

sleep 300

ping -c 1 10.10.10.13 > /dev/null
 
if [ $? -eq 0 ]
then
    echo 'Checkagain, AC Power OK !' >> /vmfs/volumes/datastore1/sh/ups.log;date >> /vmfs/volumes/datastore1/sh/ups.log
else
    echo 'AC Power is already off, shut down Esxi Now!' >> /vmfs/volumes/datastore1/sh/ups.log;date >> /vmfs/volumes/datastore1/sh/ups.log
    
        vim-cmd vmsvc/power.shutdown 11
        sleep 60
        vim-cmd vmsvc/power.shutdown 10
        sleep 60
        vim-cmd vmsvc/power.shutdown 6
        sleep 60
        vim-cmd vmsvc/power.shutdown 3
        sleep 60
        vim-cmd vmsvc/power.off 2
        sleep 60
        poweroff
fi
vi monitor.sh

monitor.sh 守护ups.sh运行

vi monitor.sh
NUM=`ps -c | grep ups.sh | grep -v grep |wc -l`
echo ${NUM}
#
if [ "${NUM}" -lt "1" ];then
/vmfs/volumes/datastore1/sh/ups.sh &
echo 'monitor start' >> /vmfs/volumes/datastore1/sh/ups.log;date >> /vmfs/volumes/datastore1/sh/ups.log
fi
exit 0
#sh权限
chmod 777 monitor.sh
chmod 777 ups.sh
#esxi重启后引导会自动恢复初始状态 需要添加一个每次启动自动写引导
vi /etc/rc.local.d/local.sh

#在exit之前添加以下cron代码 3分钟执行一次
/bin/kill $(cat /var/run/crond.pid)
/bin/echo '*/3 * * * * /vmfs/volumes/datastore1/sh/monitor.sh' >> /var/spool/cron/crontabs/root
/usr/lib/vmware/busybox/bin/busybox crond

#保存
/sbin/auto-backup.sh

最后重新引导esxi即可,日志文件保存在/datastore1/ups.log。