当前位置: 首页 > news >正文

使用Python监控服务器在线状态

前言

在公司内网有一台服务器,有动态的公网IP,使用DDNS对外提供服务,但是会因为停电、服务器卡死等原因导致服务器离线。服务器离线后无法及时获知,因此需要实现在服务器离线的时候能够发送消息到手机上。

思路梳理

公司办理的是联通的商务宽带,有赠送一台沃云的ECS,但是一直处于闲置状态,于是就想利用这个ECS去监听服务器的端口,一旦端口无法访问,就发送消息到手机上,端口恢复访问也可以发送消息到手机上。

具体实施

内网服务器配置

开放监听的端口

在内网服务器上开放一个端口,用于给公网上的ECS监听。

[root@rsecc ~]# yum -y install  nc
[root@rsecc ~]# nc -lk 32768 &
chkconfig管理

因为nc命令会在服务器重启后退出,因此可以使用chkconfig将nc服务设置为开机自启。

[root@rsecc ~]# vim /etc/init.d/ncserver

写入如下内容:

#!/bin/bash
# chkconfig: 3 88 88
/usr/bin/nc -lk 32768 &

配置权限,并添加到开机自启。

[root@rsecc ~]# chmod +x /etc/init.d/ncserver
[root@rsecc ~]# chkconfig --add ncserver
[root@rsecc ~]# chkconfig --list ncserver
ncserver          0:off	1:off	2:off	3:on	4:off	5:off	6:off

这样的话,当服务器重启后,nc命令也会随着服务器启动。

防火墙配置

还需要在防火墙上放行对应的端口。

[root@rsecc ~]# firewall-cmd --add-port=32768/tcp
[root@rsecc ~]# firewall-cmd --reload

公网ECS配置

编写python脚本

编写python脚本来实现功能,并将python脚本设置为开机自启。

导入需要使用的模块,这里使用了 socket、time、json、requests 四个模块。

import socket
import time
import requests
import json

编写发送消息的函数模块,我这里使用的是企业微信的webhook机器人,也可以使用钉钉、邮箱、短信等方式发送消息。

webhook = "webhook地址链接"#webhook发送消息
def send_text(webhook, content):header = {"Content-Type": "application/json","Charset": "UTF-8"}data ={"msgtype": "text","text": {"content": content}}data = json.dumps(data)info = requests.post(url=webhook, data=data, headers=header)

编写判断服务器状态的函数模块。这里使用的Python中的Socket标准库,通过构建一个TCP连接的Socket对象,使用connect_ex()方法连接服务器,如果连接无异常返回的状态码为0。通过判读返回的状态码是否为0来判断服务器是否在线。

def check_server_connection(server, port):sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)result = sock.connect_ex((server, port))if result == 0:service_status = "on"return service_statuselse:service_status = "off"return service_status

编写一个while死循环,通过判断状态码是否发生改变,来实现发送消息的效果。

service_status = "off"
prev_service_status = "off"while True:service_status = check_server_connection("服务器地址", 32768)if prev_service_status != service_status:if service_status == "off":content = "服务器已离线!"send_text(webhook, content)else:content = "服务器已上线!"send_text(webhook, content)prev_service_status = service_statustime.sleep(60)
设置为开机自启。

实现方式和内网服务器一样,使用ckhconfig命令。

[root@rsecc ~]# vim /etc/init.d/ncserver

写入如下内容:

#!/bin/bash
# chkconfig: 3 88 88
/usr/bin/python3 /opt/serveron.py &

配置权限,并添加到开机自启。

[root@rsecc ~]# chmod +x /etc/init.d/ncserver
[root@rsecc ~]# chkconfig --add ncserver
[root@rsecc ~]# chkconfig --list ncserver
ncserver          0:off	1:off	2:off	3:on	4:off	5:off	6:off

这样的话,当服务器重启后,python脚本也会随着服务器启动。

效果

image-20231212124927263

总结

至此,通过一个简易的脚本即可实现服务器的状态监控。

© 版权声明
文章:使用Python监控服务器在线状态
作者:Guangran
链接:https://www.rsecc.cn/955.html
声明:如无特别说明本文即为原创文章仅代表个人观点,版权归《广然笔记》所有,未经授权、请勿转载。

http://www.lryc.cn/news/259418.html

相关文章:

  • 【JAVA】黑马MybatisPlus 学习笔记【二】【核心功能】
  • 区块链实验室(30) - 区块链期刊:Distributed Ledger Technologies: Research and Practice
  • Nginx【通俗易懂】《中篇》
  • 组件的二次封装
  • curl+postman 在java开发中的使用(提高效率)
  • 【电子取证:FTK IMAGER 篇】DD、E01系统镜像动态仿真
  • netcat瑞士军刀
  • 【征稿倒计时十天】第三届高性能计算与通信工程国际学术会议(HPCCE 2023)
  • 编程应用实际场景:台球厅怎么样用电脑给客人计时,台球计时收费系统操作教程
  • 云计算大屏,可视化云计算分析平台(云实时数据大屏PSD源文件)
  • 高频js-----js执行机制 Event Loop
  • 恢复出厂设置后在 Android 上恢复照片的 6 种常用方法
  • 人工智能_机器学习065_SVM支持向量机KKT条件_深度理解KKT条件下的损失函数求解过程_公式详细推导_---人工智能工作笔记0105
  • 网线市场现状与发展趋势预测
  • 力扣二叉树--第四十一天
  • 计算机视觉(P2)-计算机视觉任务和应用
  • redis-学习笔记(Jedis zset 简单命令)
  • uniapp实战 —— 弹出层 uni-popup (含vue3子组件调父组件的方法)
  • 智能优化算法应用:基于平衡优化器算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • Netty详细文档
  • C语言结构体和位段
  • 【剑指offer|图解|数组】寻找文件副本 + 螺旋遍历二维数组
  • Python核心编程之文件和输入输出
  • Axure 9基本元件,表单及表格元件简介,表单案例
  • ARM I2C通信
  • Cent OS7 磁盘挂载:扩展存储空间和自动挂载
  • 《使用ThinkPHP6开发项目》 - 创建应用
  • SpringBoot进行自然语言处理,利用Hanlp进行文本情感分析
  • MySQL 报错 You can‘t specify target table for update in FROM clause解决办法
  • Linux中使用podman管理容器