所有虚拟机关闭则关机

定时运行脚本,检测到所有虚拟机关闭了则关机

#!/bin/bash
# 检查所有虚拟机是否已经关闭
someone_up=0
for vmid in $(/usr/sbin/qm list | awk 'NR>1 {print $1}'); do
    status=$(/usr/sbin/qm status $vmid)
      if ! echo "$status" | grep -q "stopped"; then
        someone_up=1
        break
    fi
done
# 如果有虚拟机没有关闭则退出检测
if [ $someone_up -eq 1 ]; then
    #echo "还有虚拟机在运行" >> /var/log/isAllDown.log
    exit 0
fi
# 如果检测到所有虚拟机已经关闭,则延时再确认
sleep 15 # 等待15秒
someone_up=0
for vmid in $(/usr/sbin/qm list | awk 'NR>1 {print $1}'); do
    status=$(/usr/sbin/qm status $vmid)
      if ! echo "$status" | grep -q "stopped"; then
        someone_up=1
        break
    fi
done
# 确认所有虚拟机都关闭了,并且开机时间超过了5分钟,则关闭PVE主机
if [ $someone_up -eq 0 ]; then
    uptime_seconds=$(awk '{print int($1)}' /proc/uptime)
    if [ "$uptime_seconds" -gt 300 ]; then # 系统开机时间大于5分钟
        echo "所有虚拟机都已关闭,正在关闭PVE主机..." >> /var/log/isAllDown.log
        /usr/sbin/shutdown -h now
    fi
else
    #echo "还有虚拟机在运行" >> /var/log/isAllDown.log
    exit 0
fi

添加定时任务crontab -e

* * * * * /usr/local/sbin/isAllDown.sh

定时任务最快1分钟检测一次,想要效果更好的话,可以考虑在开机后每几秒钟调用脚本检测。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值