PVE 虚拟机心跳检测并重启

2024-02-07 04:12

本文主要是介绍PVE 虚拟机心跳检测并重启,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

折腾PVE,安装了ikuai+iStoreOS+黑裙,其中DMS安装了小雅alist超集,可能是小主机性能太差导致黑裙多次崩溃,后来就想着有没有什么办法监控VM的运行情况,经过搜索一番后有两种方案看门狗(watchdog)和脚本监控,其中看门狗(watchdog)要求硬件支持就没搞,参考文章后优化了下脚本实现

参考文章:PVE 虚拟机心跳检测并重启 - Lucien's Blog

问题1:save保存后,faile.txt文件的count数就是没有叠加

解决过程:定位问题后发现,是source的问题导致,使用 source. 命令执行文件时,source 的行为是在当前 shell 环境中执行命令,所以全局声明在这个情景下是不必要的,因为 source 执行后,变量已经是当前环境的一部分了。

解决方案:将 -A 替换为 -gA,可以直接使用 sed

完整代码

#!/bin/bash# 脚本常量定义
QMPATH="/usr/sbin/qm"
MAX_FAILURES=3
RESET_AFTER_SUCCESS=2
FAILURE_FILE="/path/to/failure_file.txt"# 关联数组,用于保存各虚拟机的失败次数
declare -gA failure_count# 从文件中加载失败次数
load_failure_count() {if [[ -f "$FAILURE_FILE" ]]; thensource "$FAILURE_FILE"echo "Loaded failure count from $FAILURE_FILE"elseecho "$FAILURE_FILE does not exist, no saved failure counts to load."fi
}# 将失败次数保存至文件
save_failure_count() {if declare -p failure_count &>/dev/null; thendeclare -p failure_count | sed 's/declare -A/declare -gA/' > "$FAILURE_FILE"elseecho "Error: failure_count is not declared as an associative array." >&2fi
}# 日志记录函数
log_event() {local message="$1"echo "[$(date '+%Y-%m-%d %H:%M:%S')] $message" >> /root/soft_shell/event.log
}# 重启虚拟机函数
restart_vm() {local vm_id="$1"log_event "[重启] 由于连续失败,正在重启虚拟机ID $vm_id。"if "$QMPATH" restart "$vm_id"; thenlog_event "成功重启虚拟机ID $vm_id。"elselog_event "重启虚拟机ID $vm_id 失败。"fi
}# 处理虚拟机ping不通的情况
handle_failure() {local vm_id="$1"((failure_count["$vm_id"]++))if [[ ${failure_count["$vm_id"]} -ge $MAX_FAILURES ]]; thenrestart_vm "$vm_id"failure_count["$vm_id"]=0fisave_failure_count  # 立即保存失败次数
}# 处理虚拟机ping通的情况
handle_success() {local vm_id="$1"if [[ ${failure_count["$vm_id"]} -gt 0 ]]; thenfailure_count["$vm_id"]=0  # 成功后立即重置失败次数fisave_failure_count  # 立即保存失败次数
}# 检查虚拟机是否可达,并根据结果处理
check_vm_status() {local vm_id="$1"local vm_ip="$2"if ! ping -c 1 "$vm_ip" &>/dev/null; thenlog_event "[失败] 虚拟机ID $vm_id (IP $vm_ip) 没有响应ping。"handle_failure "$vm_id"elselog_event "[成功] 虚拟机ID $vm_id (IP $vm_ip) 响应了ping。"handle_success "$vm_id"fi
}# 遍历所有虚拟机并检查它们的状态
check_all_vms() {local vm_list="$1"for vm_info in $vm_list; dolocal vm_id vm_ipvm_id=$(echo "$vm_info" | cut -d: -f1)vm_ip=$(echo "$vm_info" | cut -d: -f2)check_vm_status "$vm_id" "$vm_ip"done
}# 脚本的主函数
main() {local vm_list="VM-ID:IP"load_failure_countcheck_all_vms "$vm_list"# save_failure_count 移动到 handle_failure 和 handle_success
}# 执行脚本的主函数
main

linux设置定时任务

crontab -e,编辑定时任务

*/1 * * * * bash /root/check_and_restart/check_and_restart.sh >> /root/check_and_restart/log.txt

效果图

这篇关于PVE 虚拟机心跳检测并重启的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/686481

相关文章

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

虚拟机与物理机的文件共享方式

《虚拟机与物理机的文件共享方式》文章介绍了如何在KaliLinux虚拟机中实现物理机文件夹的直接挂载,以便在虚拟机中方便地读取和使用物理机上的文件,通过设置和配置,可以实现临时挂载和永久挂载,并提供... 目录虚拟机与物理机的文件共享1 虚拟机设置2 验证Kali下分享文件夹功能是否启用3 创建挂载目录4

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.