收起左侧

飞牛UPS 设置,并且关联PVE系统设置自动关机

6
回复
2194
查看
[ 复制链接 ]

0

主题

1

回帖

0

牛值

江湖小虾

2024-12-18 22:54:22 显示全部楼层 阅读模式

今天飞牛更新了最新版本 fnos 0.8.27 更新了UPS功能 了解到现在只支持USB设备的UPS

当前兼容的UPS产品 施耐德(APC):BK650M2-CH等型号 山特(SANTAK):TG-BOX850等型号 硕天(CyberPower):UT650EGC等型号

有好多小伙伴的飞牛OS 是搭建在了PVE虚拟机里面 那么我们可以实现飞牛配置UPS 并设置脚本联动PVE系统实现自动关机!那么我们开始吧!

首先硬件

image.png

选择USB供应商、设备找到你的UPS 第二步到飞牛OS web界面 设置UPS

image.png

第三步 在PVE 设置自动检测飞牛系统状态的脚本

要实现当 FN-OS虚拟机(编号:101) 关闭后,在 5 分钟内未启动,则自动关闭 PVE宿主机 及所有虚拟机的功能,可以使用 cron任务 配合 脚本 来实现这一目标。以下是详细步骤:

1. 编写检测虚拟机状态的脚本

首先,编写一个脚本,定期检查 FN-OS虚拟机 是否处于关闭状态,并在满足条件时执行关机操作。这个脚本的功能是:

  • 检查 FN-OS虚拟机(编号:101) 是否关机。
  • 如果关机且持续超过 5 分钟,则关闭 宿主机 及其他虚拟机。

创建脚本 check_vm_and_shutdown.sh

  1. 使用你喜欢的编辑器创建一个新的脚本文件,例如 check_vm_and_shutdown.sh

    nano /usr/local/bin/check_vm_and_shutdown.sh
  2. 添加以下内容:

    #!/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 关闭所有虚拟机。
  3. 保存并退出编辑器(Ctrl + X,然后按 Y 确认保存)。

  4. 给予脚本可执行权限:

    chmod +x /usr/local/bin/check_vm_and_shutdown.sh

2. 设置定时任务(cron )**

接下来,设置一个定时任务,定期检查虚拟机的状态。你可以设置这个任务每分钟执行一次。

  1. 编辑 cron 配置文件:

    crontab -e
  2. 在文件末尾添加以下行,使脚本每分钟运行一次:

    * * * * * /usr/local/bin/check_vm_and_shutdown.sh

    这条规则意味着每分钟都会执行一次脚本,检查虚拟机是否已经关闭超过 5 分钟,并根据情况执行关机操作。

  3. 保存并退出编辑器(Ctrl + X,然后按 Y 确认保存)。

3. 测试脚本

为了确保脚本能正常工作,可以手动停止虚拟机,然后检查脚本是否按预期运行。

  • 停止虚拟机:

    qm stop 101
  • 等待脚本执行并检查宿主机是否在虚拟机关机后关闭(如果虚拟机关机超过 5 分钟)。

4. 其他优化(可选)

  • 如果你希望脚本在检测到虚拟机关闭时发送警告邮件,可以在脚本中使用 mail 命令(前提是安装并配置了邮件服务器)。
  • 你可以定期检查日志,确保脚本正常执行,避免因某些异常情况导致问题。

总结

通过以上步骤,你可以实现当 FN-OS虚拟机(编号:101) 关机超过 5 分钟时,自动关闭 PVE宿主机 和所有其他虚拟机的功能。通过 cron 定时任务,脚本会定期检查虚拟机的状态,并根据条件自动执行关机操作。

收藏
送赞 3
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

0

主题

1

回帖

0

牛值

江湖小虾

2024-12-18 23:47:27 楼主 显示全部楼层



优化以后得脚本!
#!/bin/bash

# 定义服务名和脚本路径
SERVICE_NAME="zidongguanji.service"
SCRIPT_PATH="/usr/local/bin/zidongguanji"
LOG_PATH="/var/log/zidongguanji.log"

# 更新系统并安装必要的依赖(如果需要)
echo "更新系统和安装依赖..."
sudo apt update -y
sudo apt upgrade -y

# 创建虚拟机监控脚本 (示例脚本)
echo "创建虚拟机监控脚本..."

cat << 'EOF' | sudo tee $SCRIPT_PATH > /dev/null
#!/bin/bash

# 虚拟机ID
VM_ID=101
LOG_FILE="/var/log/zidongguanji.log"

# 检查虚拟机状态
while true; do
    VM_STATUS=$(qm status $VM_ID)
    echo "$(date): Checking VM $VM_ID status: $VM_STATUS" >> $LOG_FILE

    if [[ "$VM_STATUS" == *"running"* ]]; then
        echo "$(date): VM $VM_ID is running" >> $LOG_FILE
    else
        echo "$(date): VM $VM_ID is not running, starting it..." >> $LOG_FILE
        qm start $VM_ID
    fi

    # 等待600秒后再次检查状态
    sleep 600
done
EOF

# 赋予脚本执行权限
echo "赋予脚本执行权限..."
sudo chmod +x $SCRIPT_PATH

# 创建 systemd 服务文件
echo "创建 systemd 服务文件..."

cat << EOF | sudo tee /etc/systemd/system/$SERVICE_NAME > /dev/null
[Unit]
Description=Zidongguanji VM Monitor Script
After=network.target

[Service]
ExecStart=$SCRIPT_PATH
Restart=always
User=root
WorkingDirectory=/root
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
EOF

# 重新加载 systemd 服务
echo "重新加载 systemd 配置..."
sudo systemctl daemon-reload

# 启用并启动服务
echo "启用并启动服务..."
sudo systemctl enable $SERVICE_NAME
sudo systemctl start $SERVICE_NAME

# 检查服务状态
echo "检查服务状态..."
sudo systemctl status $SERVICE_NAME

# 完成
echo "一切设置完成,服务已启用并启动。"

0

主题

2

回帖

0

牛值

江湖小虾

2024-12-19 10:59:11 显示全部楼层
大佬真快啊

1

主题

82

回帖

0

牛值

初出茅庐

2025-1-2 20:56:52 显示全部楼层
谢谢大神

0

主题

1

回帖

0

牛值

江湖小虾

2025-4-27 16:03:59 显示全部楼层

如何设置呢?

10

主题

16

回帖

0

牛值

fnOS系统内测组

2025-7-14 21:19:14 显示全部楼层

挺好的!但还有一点,万一我因某种原因手动关了fnos,那我应该怎样避免5分钟后pve整个全关了呢😂虽然可以删除整个脚本,但这样来回搞又太麻烦,是不是可以整个系统变量之类的

0

主题

1

回帖

0

牛值

江湖小虾

前天 17:54 楼主 显示全部楼层

1111

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则