| 今天飞牛更新了最新版本 fnos 0.8.27 更新了UPS功能 了解到现在只支持USB设备的UPS 当前兼容的UPS产品
施耐德(APC):BK650M2-CH等型号
山特(SANTAK):TG-BOX850等型号
硕天(CyberPower):UT650EGC等型号 有好多小伙伴的飞牛OS 是搭建在了PVE虚拟机里面 那么我们可以实现飞牛配置UPS 并设置脚本联动PVE系统实现自动关机!那么我们开始吧! 首先硬件 
 选择USB供应商、设备找到你的UPS
第二步到飞牛OS web界面 设置UPS 
 第三步 在PVE 设置自动检测飞牛系统状态的脚本 要实现当 FN-OS虚拟机(编号:101) 关闭后,在 5 分钟内未启动,则自动关闭 PVE宿主机 及所有虚拟机的功能,可以使用 cron任务 配合 脚本 来实现这一目标。以下是详细步骤: 1. 编写检测虚拟机状态的脚本首先,编写一个脚本,定期检查 FN-OS虚拟机 是否处于关闭状态,并在满足条件时执行关机操作。这个脚本的功能是: 
检查 FN-OS虚拟机(编号:101) 是否关机。如果关机且持续超过 5 分钟,则关闭 宿主机 及其他虚拟机。 创建脚本 check_vm_and_shutdown.sh
使用你喜欢的编辑器创建一个新的脚本文件,例如 check_vm_and_shutdown.sh: nano /usr/local/bin/check_vm_and_shutdown.sh
添加以下内容: #!/bin/bash
VM_ID=101
VM_STATUS=$(qm status $VM_ID | awk '{print $2}')  # 获取虚拟机状态
if [[ "$VM_STATUS" == "stopped" ]]; then
    # 获取虚拟机关机的时间
    LAST_SHUTDOWN=$(qm config $VM_ID | grep 'last_shut_time' | awk -F '= ' '{print $2}')
    # 当前时间戳
    CURRENT_TIME=$(date +%s)
    # 如果虚拟机在过去 5 分钟内关机,执行宿主机和所有虚拟机的关机
    if (( CURRENT_TIME - LAST_SHUTDOWN > 300 )); then
        echo "VM $VM_ID has been shut down for more than 5 minutes. Shutting down PVE and all VMs."
        # 关闭所有虚拟机
        for VM in $(pvesh get /nodes/$(hostname)/qemu | jq -r '.[].vmid'); do
            qm stop $VM
        done
        # 关机宿主机
        shutdown -h now
    fi
fi
 解释: 
VM_ID=101:指定虚拟机编号为 101。qm status $VM_ID:检查虚拟机的当前状态。last_shut_time:获取虚拟机的最后关机时间。date +%s:获取当前时间的时间戳。如果虚拟机关机超过 5 分钟,则通过 shutdown -h now关机宿主机,并通过qm stop关闭所有虚拟机。
保存并退出编辑器(Ctrl + X,然后按Y确认保存)。
给予脚本可执行权限: chmod +x /usr/local/bin/check_vm_and_shutdown.sh
 2. 设置定时任务(cron )**接下来,设置一个定时任务,定期检查虚拟机的状态。你可以设置这个任务每分钟执行一次。 
编辑 cron 配置文件: crontab -e
在文件末尾添加以下行,使脚本每分钟运行一次: * * * * * /usr/local/bin/check_vm_and_shutdown.sh
 这条规则意味着每分钟都会执行一次脚本,检查虚拟机是否已经关闭超过 5 分钟,并根据情况执行关机操作。
保存并退出编辑器(Ctrl + X,然后按Y确认保存)。 3. 测试脚本为了确保脚本能正常工作,可以手动停止虚拟机,然后检查脚本是否按预期运行。 4. 其他优化(可选)
如果你希望脚本在检测到虚拟机关闭时发送警告邮件,可以在脚本中使用 mail命令(前提是安装并配置了邮件服务器)。你可以定期检查日志,确保脚本正常执行,避免因某些异常情况导致问题。 总结通过以上步骤,你可以实现当 FN-OS虚拟机(编号:101) 关机超过 5 分钟时,自动关闭 PVE宿主机 和所有其他虚拟机的功能。通过 cron 定时任务,脚本会定期检查虚拟机的状态,并根据条件自动执行关机操作。 |