使用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_status
    else:
        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_status
    time.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
声明:如无特别说明本文即为原创文章仅代表个人观点,版权归《广然笔记》所有,未经授权、请勿转载。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JAVA】黑马MybatisPlus 学习笔记【二】【核心功能】

2.核心功能 刚才的案例中都是以id为条件的简单CRUD,一些复杂条件的SQL语句就要用到一些更高级的功能了。 2.1.条件构造器 除了新增以外,修改、删除、查询的SQL语句都需要指定where条件。因此BaseMapper中提供的相关方法除了以id作为where条件以外&…

java面试题-Spring事务以及@Transactional注解详解

远离八股文,面试大白话,通俗且易懂 看完后试着用自己的话复述出来。有问题请指出,有需要帮助理解的或者遇到的真实面试题不知道怎么总结的也请评论中写出来,大家一起解决。 java面试题汇总-目录-持续更新中 对于这个面试中高频问到…

关于“Python”的核心知识点整理大全18

目录 ​编辑 8.5 传递任意数量的实参 pizza.py 8.5.1 结合使用位置实参和任意数量实参 8.5.2 使用任意数量的关键字实参 user_profile.py 8.6 将函数存储在模块中 8.6.1 导入整个模块 pizza.py making_pizzas.py 8.6.2 导入特定的函数 8.6.3 使用 as 给函数指定别名…

[Vulnhub靶机] DriftingBlues: 7

[Vulnhub靶机] DriftingBlues: 7靶机渗透思路及方法(个人分享) 靶机下载地址: https://download.vulnhub.com/driftingblues/driftingblues7_vh.ova 靶机地址:192.168.67.25 攻击机地址:192.168.67.3 一、信息收集 …

苹果电脑双开

1.第一步:在应用程序中找到微信 复制一个副本出来 2.第二步:打开复制的《微信副本》 右键打开 – 显示包内容 3.第三步:Contents - info.plist 后右键 打开方式 选择 文本编辑 4.第四步:找到查找和替换 这一段com.tencent.xinWeChat 后面是修改 com.tenc…

微软AutoGen框架:AI的新时代,你的新机遇

一、引言 在科技日新月异的今天,人工智能已经深入到我们生活的各个角落。无论是智能手机、智能家居还是自动驾驶汽车,人工智能的应用无处不在。而在这个领域中,微软AutoGen框架无疑是一颗璀璨的新星。它以其独特的创新性和实用性&#xff0c…

matlab信号分选系统算法-完整算法结构

matlab信号分选系统算法 针对得到的脉冲流PDW进行信号分选,包括重频恒定、重频抖动、重频参差和重频滑变四种脉间调制类型。   这里我们先进行数据的仿真,后续边仿真边分享思路:首先根据信号类型,分别产生重频恒定、重频抖动、重…

亚马逊、速卖通、虾皮等平台有哪些测评补单方案,哪个比较好用

随着全球电子商务的迅速发展,跨境电商环境的潜力和机遇日益显现。跨境卖家们可以更便捷地将产品销售到全球市场,但同时也面临着更激烈的竞争、更严格的规定和更高的运营成本等挑战。在这个环境中,如何抓住机遇并克服挑战,成为了所…

AI全栈大模型工程师(二十七)如何部署自己 fine-tune 的模型

服务器价格计算器 火山引擎提供的这个价格计算器很方便,做个大概的云服务器 GPU 选型价格参考。其它服务厂商价格相差不是很多。 https://www.volcengine.com/pricing?productECS&tab2 高稳定和高可用地部署模型 序号模块名称描述1负载均衡将流入的请求分发到多…

Python进阶(一)

1.Python中一切皆对象 1.1 Python中一切皆对象 JAVA中有class和object这两个概念,object只是class的一个实例。 而在Python中面向对象更加的彻底,class和函数都是对象。代码也是对象,模块也是对象。 函数和类也是对象,对象有四…

代码随想录刷题题Day12

刷题的第十二天,希望自己能够不断坚持下去,迎来蜕变。😀😀😀 刷题语言:C Day12 任务 ● 层序遍历 10 ● 226.翻转二叉树 ● 101.对称二叉树 2 1 层序遍历 一口气做十题 102.二叉树的层序遍历 107.二叉树的…

恢复出厂设置后在 Android 上恢复照片的 6 种常用方法

恢复出厂设置可帮助您删除电子设备的所有信息并将其恢复到原始系统状态。但是,如果您不小心按下了恢复出厂设置按钮并从 Android 设备中删除了所有难忘的照片,该怎么办?好吧,您无需担心,因为可以通过以下一些方法来恢复…

03 python循环语句

3.1while循环基本语法 # 演示while循环的基础应用i0 while i<100 :print(不到100)i 1while循环基本案例 import random num random.randint(1, 100) count 0 while True:guess_num int(input(随机输入数字&#xff1a;))count 1if guess_num num :print(jie shu)br…

C++构造函数列表初始化的优点

构造函数的执行可以分成两个阶段&#xff0c;初始化阶段和计算阶段&#xff0c;初始化阶段先于计算阶段。而初始化阶段就是对应着初始化列表那部分&#xff0c;而计算阶段就是构造函数的函数体部分。初始化阶段先于计算阶段执行。 #include<iostream>class Demon { publ…

Cent OS7 磁盘挂载:扩展存储空间和自动挂载

文章目录 &#xff08;1&#xff09;概述&#xff08;2&#xff09;查看磁盘使用情况&#xff08;3&#xff09;VMware虚拟机挂载磁盘&#xff08;4&#xff09;物理机磁盘挂载&#xff08;5&#xff09;ntfs硬盘处理 &#xff08;1&#xff09;概述 在Linux系统中&#xff0c…

数据结构和算法 - 前置扫盲

数据结构和算法 一、前置扫盲 1、数据结构分类 1.1 逻辑结构&#xff1a;线性与非线性 tip&#xff1a;逻辑结构揭示了数据元素之间的逻辑关系。 线性数据结构&#xff1a;元素间存在明确的顺序关系。 数据按照一定顺序排列&#xff0c;其中元素之间存在一个对应关系&#x…

Axure 9基本元件,表单及表格元件简介,表单案例

目录 一.基本元件 1.元件基本介绍 2.基本元件的使用 二.表单及表格元件 三.表单案例 四.简单简历绘制 一.基本元件 1.元件基本介绍 概述 - 在Axure RP中&#xff0c;元件是**构建原型图的基础模块**。 将元件从元件库里拖拽到画布中&#xff0c;即可添加元件到你的原型…

【洛谷算法题】P1422-小玉家的电费【入门2分支结构】

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P1422-小玉家的电费【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…

2023前端面试题总结:JavaScript篇完整版

前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 JavaScript基础知识 JavaScript有哪些数据类型&#xff0c;它们的区别&#xff1f; Number&#xff08;数字&#xff09;: 用于表示数值&#xff0c;可…

【剑指offer|图解|二分查找】点名 + 统计目标成绩的出现次数

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;数据结构、剑指offer每日一练 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. ⛳️点名1.1 题目1.2 示例1.3 限制1.4 解题思路一c代码 1.5 解题思路二c代码 二. ⛳️统…