ESXI结合UPS停电后自动关机

以下是一个大概思路.若有更好的建议,欢迎留言或私信.

原理


交换机未接ups,停电的时候,交换机关机,esxi的网卡是down掉的
ESXI开启ssh,写一个检测脚本,定期检测网卡状态,如果网卡down掉(检测3次,间隔10s,结果全部为down),可以判断为市电停了,执行关机操作.

esxi相关命令(esxi 5/6)


vim-cmd vmsvc/getallvms  #获取虚拟机列表
vim-cmd vmsvc/power.getstate vm_id  #获取虚拟机状态
vim-cmd vmsvc/power.off vm_id   #关闭虚拟机
poweroff  #关闭物理机

esxi相关Tips


  1. esxi开启ssh功能
  2. 硬盘路径:/vmfs/volumes
  3. esxi的数据放在数据盘上,否则重启丢失
  4. 解决时区的问题:linux找一个localtime文件,复制到esxi的/etc下
  5. esxi添加开机启动路径/etc/rc.local.d/local.sh,创建定时任务

脚本

/etc/rc.local.d/local.sh

/bin/cp /vmfs/volumes/datastone3/Scripts/localtime /etc/
/bin/touch /vmfs/volumes/datastone3/Scripts/rc_check
/bin/chmod +w /var/spool/cron/crontabs/root
/bin/kill $(cat /var/run/crond.pid)
/bin/echo '*/5 * * * * /vmfs/volumes/datastone3/Scripts/check_nic.sh' >> /var/spool/cron/crontabs/root
/bin/crond
exit 0

/vmfs/volumes/datastone3/Scripts/check_nic.sh

#!/bin/sh
nic_stat=`esxcfg-nics -l | grep vmnic0 | awk '{print $4}'`
date=`date +'%Y/%m/%d %H:%M:%S'`
ok='test ok'
bad='test bad'
BASE_DIR=`pwd`
log=$BASE_DIR/log/check.log
if [ -f "rc_check" ];then #启动时延迟十分钟检测
  sleep 600
  rm -f rc_check
fi

if [ "$nic_stat" == "Down" ];then
    sleep 1
    echo "$date : $bad">>$log
    if [ "$nic_stat" == "Down" ];then
        sleep 1
        echo "$date : $bad">>$log
            if [ "$nic_stat" == "Down" ];then
              echo "$date : $bad">>$log
            fi
    fi
else
    echo "$date : $ok">>$log
fi

你可能感兴趣的:(ESXI结合UPS停电后自动关机)