所有虚拟机关闭则关机

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

#!/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分钟检测一次,想要效果更好的话,可以考虑在开机后每几秒钟调用脚本检测。

### 如何在虚拟机中执行强制关机的操作方法 在虚拟机无法正常关闭的情况下,可以采取以下几种方法来实现强制关机: #### 1. 使用PVE Web界面进行强制关机 登录到Proxmox VE(PVE)的Web管理界面,在左侧导航栏中选择需要重启或关闭虚拟机。点击上方的 **Power** 按钮,然后选择 **Stop** 来强制关闭虚拟机[^1]。等待虚拟机状态变为关闭后,可以再次点击 **Start** 来启动虚拟机。 #### 2. 使用命令行强制关闭虚拟机 对于使用ESXi的环境,可以通过命令行执行以下操作: - 首先,列出当前正在运行的虚拟机进程以确认目标虚拟机是否仍然处于活动状态: ```bash esxcli vm process list ``` - 根据虚拟机的ID或名称,选择适当的关闭模式。有三种关闭模式可供选择:`soft`、`hard` 和 `force`。如果前两种模式无法成功关闭虚拟机,则可以使用 `force` 模式强制关闭: ```bash vim-cmd vmsvc/power.off <VM_ID> ``` 或者直接使用 `force` 模式: ```bash vim-cmd vmsvc/power.forceShutdown <VM_ID> ``` 这里的 `<VM_ID>` 是虚拟机的唯一标识符[^3]。 #### 3. VMware虚拟机的强制关机 如果是在VMware环境中,可以尝试以下步骤: - 在VMware Workstation或Fusion的界面中,选择虚拟机并点击 **Power Off**。如果虚拟机无响应,可以选择 **Force Shutdown**。 - 如果通过图形界面仍然无法解决问题,可以打开命令提示符(以管理员身份运行),输入以下命令来重置网络套接字并重启计算机: ```cmd netsh winsock reset ``` 然后重启计算机以应用更改[^2]。 #### 4. 处理强制关机后黑屏问题 如果强制关机虚拟机出现黑屏问题,可以尝试以下解决方法: - **删除锁定文件**:进入虚拟机目录,删除所有以 `.lck` 结尾的文件和文件夹[^2]。 - **重建虚拟机配置**:创建一个新的虚拟机,并将旧虚拟机的磁盘文件(通常是 `.vmdk` 文件)挂载到新虚拟机上。这样可以确保数据完整性并恢复访问权限[^2]。 #### 5. 避免资源超载导致的关机失败 如果虚拟机无法正常关机的原因是由于CPU资源不足或磁盘超时问题,可以检查主机的硬件配置。确保同时启动的虚拟机数量不会超过主机CPU和内存的承载能力[^4]。 #### 6. Linux虚拟机的正确关机方法 为了避免强制关机Linux系统造成文件损坏或其他问题,建议尽可能通过系统命令正确关闭虚拟机。例如,在虚拟机内部执行以下命令: ```bash sudo shutdown -h now ``` 如果虚拟机仍然无法响应,可以考虑上述的强制关机方法,但需注意可能带来的风险[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值