python小脚本,实时监测服务器是否宕机状态,并发送到指定群组

一,前言

众所周知,市面上监控软件很多,有Zabbix,Prometheus等,但对于相对简单的功能,需要第一时间发现问题,如服务器宕机,zabbix和Prometheus都需要等几分钟才会报警。

想到最原始的方法,也是最简单的方法,就是ping 服务器,ping断开就是宕机。所以用一个小脚本即可。

二,脚本内容

1,脚本说明:

  • 每个服务器都有对应的名称,保存在字典 servers 中。

  • 如果某个服务器连续 10 秒无法 ping 通,则向 TG群发送服务器的名称和 IP(根据自己需求添加发送指定的媒体)。

  • 可以根据需求调整 time.sleep(10) 的时间间隔。

  • 状态跟踪: server_status 字典保存了每个服务器的当前状态,True 表示服务器在线,False 表示服务器不在线。

  • 状态变化检测:
    如果服务器从“在线”变为“不在线”,就会被标记为挂掉,发送“服务器挂掉”通知。
    如果服务器从“不在线”变为“在线”,就会被标记为恢复,发送“服务器恢复”通知。

  • 状态更新: 状态在每次检测后更新为当前状态。
    这样就能在服务器挂掉时收到通知,在恢复后也会及时得到通知。

  • 每次检测时挂掉服务器都会发送通知: 即使之前已经挂掉过,只要服务器继续挂掉,脚本会在每次循环中发送挂掉信息,如果只发送一次,会误发或者忽略,所以重复发送可以肯定服务器状态。

  • 恢复的服务器只发送一次通知: 通过跟踪状态,只在服务器从“不在线”状态切换到“在线”状态时发送“恢复”通知。重复发的挂掉信息则会停止。

2,脚本内容

import os
import time
import requests# 服务器列表,格式为 { '服务器名称': '服务器IP' }
servers = {'测试服务器1': '192.168.203.132','servername2': '192.168.1.2','servername3': '192.168.1.3'
}# 记录每个服务器的状态,True 表示在线,False 表示不在线
server_status = {name: True for name, ip in servers.items()}# TG 机器人 API Token 和群 ID
telegram_token = '5249774617:asdasdasd.....'
chat_id = '-459853...'# 向 Telegram 群发送通知的函数
def send_telegram_message(message):url = f'https://api.telegram.org/bot{telegram_token}/sendMessage'data = {'chat_id': chat_id,'text': message}try:requests.post(url, data=data)except Exception as e:print(f"发送消息失败: {e}")# 检查服务器状态的函数
def check_servers():down_servers = []recovered_servers = []for name, ip in servers.items():response = os.system(f"ping -c 5 {ip} > /dev/null 2>&1")is_online = (response == 0)# 如果服务器挂掉(即 ping 不通)if not is_online:# 如果之前是在线的,刚刚挂掉,标记为挂掉并发送通知if server_status[name]:server_status[name] = False# 每次服务器挂掉时都发送通知down_servers.append((name, ip))# 如果服务器恢复(即 ping 通),只发送一次恢复通知elif not server_status[name] and is_online:recovered_servers.append((name, ip))server_status[name] = Truereturn down_servers, recovered_servers# 主循环
while True:down_servers, recovered_servers = check_servers()# 处理挂掉的服务器for name, ip in down_servers:send_telegram_message(f"❌{name} -Server DOWN,IP:({ip})")# 处理恢复的服务器for name, ip in recovered_servers:send_telegram_message(f"✅{name} -Server UP,IP:({ip})")time.sleep(10)  # 每 10 秒检测一次

三,脚本运行测试

原脚本由于是持续运行,所以是死循环,只要后台运行一次即可。

nohup python3 monitor.py >dev/null 2>&1 &

模拟测试结果,完成。
在这里插入图片描述
后续可以继续完善,可以写个检测此脚本的小shell程序,定时检查此脚本,万一机器重启,可以重启自动重启。

参考我以前文章:grep在shell脚本中使用,判断进程是否存在

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/424574.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

故障排查:VMware虚拟机网络冲突,导致VPN网络无法正常访问

故障现象 某台windows10系统电脑,远程拨号SSL VPN后,无法正常公司内网。通过排查,发现重启开机,操作系统的默认路由多了一条公司内网的默认路由,但网关不正确。手动删除,重启系统又恢复原样。 排查过程 c…

adb的安装和使用 以及安装Frida 16.0.10+雷电模拟器

.NET兼职社区 .NET兼职社区 .NET兼职社区 1.下载adb Windows版本:https://dl.google.com/android/repository/platform-tools-latest-windows.zip 2.配置adb环境变量 按键windowsr打开运行,输入sysdm.cpl,回车。 高级》环境变量》系统变量》…

OpenCV结构分析与形状描述符(20)计算一个包围给定点集的最小外接圆函数minEnclosingCircle()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 找到一个包围二维点集的最小面积的圆。 该函数使用迭代算法来寻找一个二维点集的最小外接圆。这意味着函数将会通过反复逼近的过程来计算出能够…

多维时序 | Matlab基于BO-LSSVM贝叶斯优化最小二乘支持向量机数据多变量时间序列预测

多维时序 | Matlab基于BO-LSSVM贝叶斯优化最小二乘支持向量机数据多变量时间序列预测 目录 多维时序 | Matlab基于BO-LSSVM贝叶斯优化最小二乘支持向量机数据多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于BO-LSSVM贝叶斯优化最小二乘支…

莎朗斯通的比基尼视频曝光了她的日常锻炼!自爆曾在重症监护室呆了9天

如果您错过了,莎朗斯通 (Sharon Stone) 的华丽比基尼视频向您展示了她的日常锻炼! 9 月 12 日,斯通分享了一段她在泳池里锻炼的视频。她分享了这段视频,并配文:“我刚刚和教练 kristinemarie_18 完成了最后一次锻炼&a…

【Python刷题】Atcoder Beginner Contest 371

目录 A - Jiro题目描述算法思路代码实现 B - Taro题目描述算法思路代码实现 D - 1D Country题目描述算法思路代码实现 E - I Hate Sigma Problem题目描述算法思路代码实现 A - Jiro 题目描述 有三个人,知道他们之中每两个人的年龄关系,输出年龄第二大的…

Unity实现自己的协程系统

为什么自己实现一套协程系统 协程(Coroutine)是一个强大且灵活的工具,它可以帮助开发者处理异步任务,例如等待某些事件、处理逐帧更新等。在Unity中,协程通常通过IEnumerator来实现,这种机制允许代码在执行…

效率神器来了:AI工具手把手教你快速提升工作效能

随着科技的进步,AI工具已经成为提升工作效率的关键手段。本文将介绍一些实用的AI工具和方法,帮助你自动化繁琐的重复性任务、优化数据管理、促进团队协作与沟通,并提升决策质量。 背景:OOP AI-免费问答学习交流-GPT 自动化重复性任…

IP纯净度对跨境电商有哪些影响

在全球化贸易的浪潮中,跨境电商凭借其打破地理界限的能力,成为推动国际贸易的重要力量。然而,跨境电商的运营并非没有挑战,其中IP纯净度是影响其成功的关键因素之一。本文将探讨IP纯净度对跨境电商运营的多方面影响,并…

从单体到微服务:FastAPI ‘挂载’子应用程序的转变

在现代 Web 应用开发中,模块化架构是一种常见的设计模式,它有助于将大型应用程序分解为更小、更易于管理的部分。FastAPI,作为一个高性能的 Python Web 框架,提供了强大的支持来实现这种模块化设计。通过“挂载”子应用程序&#…

WebGL系列教程八(GLSL着色器基础语法)

目录 1 前言2 基本原则3 基本数据类型4 顶点着色器和片元着色器4.1 声明4.2 初始化项目4.3 赋值 5 结构体5.1 声明5.2 赋值 6 函数6.1 基本结构6.2 自定义函数6.3 常用内置函数 7 精度8 其他9 总结 1 前言 通过前七讲,我们已经见过了WebGL中的部分基础语法&#xff…

webpack5-手撸RemoveConsolePlugin插件

写在前面 其实呢,这个东西也就那样,主要是我们得清楚webpack构建过程中的生命周期钩子, 就拿这个插件来说,我们想要把输出的js文件里面的内容中的console语句去掉,那么我们就需要找到webpack处理完文件时的钩子&#…

海外VS国内:网安上市公司人均创收对比

二级市场分析章节中分析了中国网络网络安全上市公司人均创收63.2万、人均毛利37.6万,人均创利-1.6万。 有网友问了:海外网络安全公司的人均情况如何?那么让我们一起看看吧。 我们统计了在海外上市的28家主要网络安全公司的2023年的人均情况&…

2020ICPC上海 D - Walker M - Gitignore

D: 首先显然要二分,判断当前二分的mid时间下是否能满足走满0~n 枚举所有情况,这里按照左,右起点p1,p2分别讨论 p1向左 p2向左(以下向左和向右都代表向左或者向右到墙,而不代表初速度方向),只需要计算p1或者p2反弹之后还能走距离n就是合法 p1向左 p2向右&#xff…

PHP智慧家政同城服务家政系统小程序源码

智慧家政,同城服务新篇章 —— 探索家政系统的无限可能 开篇:走进智慧家政时代 在这个快节奏的生活中,每一分每一秒都显得尤为珍贵。当忙碌成为常态,如何让家成为真正的避风港?答案或许就藏在“智慧家政同城服务家政…

155K Star,Python 入门到进阶最佳学习资源

Hi,骚年,我是大 G,公众号「GitHub 指北」会推荐 GitHub 上有趣有用的项目,一分钟 get 一个优秀的开源项目,挖掘开源的价值,欢迎关注。 导语 如果你正在寻找一个全面、系统、深入的 Python 学习项目&#…

合资油车断崖式崩盘,买车的千万慎重了

文 | AUTO芯球 作者 | 雷慢 合资车,燃油车全体大逃亡的时候来了, 你敢信吗,8月份,国内新能源汽车零售渗透率达到54%, 我给大家讲个冷笑话, 几个月前还有车企老总说什么, “只要传统车企一发…

pyflink 安装和测试

FPY Warning! 安装 apache-Flink # pip install apache-Flink -i https://pypi.tuna.tsinghua.edu.cn/simple/ Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple/ Collecting apache-FlinkDownloading https://pypi.tuna.tsinghua.edu.cn/packages/7f/a3/ad502…

软件测试学习笔记丨Docker 安装、管理、搭建服务

本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/32192 容器(Docker)技术的价值 保证环境一致性,只要使用相同镜像部署就可以保证一致性。轻量级虚拟化访问,运行更快,资源更小。同时…

微信小程序使用 ==== 粘性布局

目录 Chrome杀了个回马枪 position:sticky简介 你可能不知道的position:sticky 深入理解粘性定位的计算规则 粘性定位其他特征 代码实现 微信小程序在scroll-view中使用sticky Chrome杀了个回马枪 position:sticky早有耳闻也有所了解,后来,Chro…