ESXI虚拟机连接UPS实现断电自动关机的脚本

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


先简单了解一下几条命令:

1、获取ESXI上的所有虚拟机VMID的值

vim-cmd vmsvc/getallvms

 

2、把虚拟机正常关机

vim-cmd vmsvc/power.shutdown vmid的值

 

3、把虚拟机强制关闭电源

vim-cmd vmsvc/power.off vmid的值

 

 


开始干活:

#进入ESXI的存储盘

cd /vmfs/volumes/datastore1

 

#建立ups文件夹

mkdir ups

 

#进入ups文件夹

cd ups

 

#编辑ups.sh文件

vi ups.sh

 

#以下为 ups.sh 的内容,请酌情修改。
#其中:10.10.10.1 为主路由的IP,sleep 为稍等时间(秒),vmid的值请根据自己的实际情况修改。
#示例:每分钟ping主路由的IP,如果ping不通的话(停电就断网了)5分钟后会再次检测。再次检测如依然不通,则ESXI依次关闭虚拟机后,宿主关机。
#!/bin/sh
while
ping -c 1 10.10.10.1 > /dev/null
[ $? -eq 0 ];
do
    echo 'AC Power OK !' >> /vmfs/volumes/datastore1/ups/ups.log;date >> /vmfs/volumes/datastore1/ups/ups.log
    sleep 60
done
echo 'AC Power maybe off, checking again after 5 minutes !' >> /vmfs/volumes/datastore1/ups/ups.log;date >> /vmfs/volumes/datastore1/ups/ups.log
sleep 300
ping -c 1 10.10.10.1 > /dev/null
if [ $? -eq 0 ]
    then
        echo 'Checkagain, AC Power OK !' >> /vmfs/volumes/datastore1/ups/ups.log;date >> /vmfs/volumes/datastore1/ups/ups.log
    else
        echo 'AC Power is already off, shut down Esxi Now!' >> /vmfs/volumes/datastore1/ups/ups.log;date >> /vmfs/volumes/datastore1/ups/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
#ups.sh 的内容结束
 #编辑monitor.sh,守护ups.sh这个脚本正常运行 vi monitor.sh # monitor.sh 的内容开始
NUM=`ps -c | grep ups.sh | grep -v grep |wc -l`
echo ${NUM}
if [ "${NUM}" -lt "1" ];then
     /vmfs/volumes/datastore1/ups/ups.sh &
     echo 'monitor start' >> /vmfs/volumes/datastore1/ups/ups.log;date >> /vmfs/volumes/datastore1/ups/ups.log
fi
exit 0
#monitor.sh 的内容结束 #调整两个脚本的权限 chmod 755 monitor.sh
chmod 755 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/ups/monitor.sh' >> /var/spool/cron/crontabs/root
/usr/lib/vmware/busybox/bin/busybox crond  #需要执行一次/sbin/auto-backup.sh命令,我们上面编辑的脚本才真正的保存 /sbin/auto-backup.sh

 


【补充说明】

ESXi 8 为了安全性考虑,不允许第三方程序运行,需要设置手动禁止(如果不禁止,就会提示:-sh: ./ipmitool: Operation not permitted),允许ESXi 8 执行第三方程序。

esxcli system settings advanced set -o /User/execInstalledOnly -i 0

 

点赞

发表回复