今天飞牛更新了最新版本 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 定时任务,脚本会定期检查虚拟机的状态,并根据条件自动执行关机操作。 |