前言
在公司内网有一台服务器,有动态的公网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 -lk32768&
配置权限,并添加到开机自启。
[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发送消息defsend_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来判断服务器是否在线。
defcheck_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脚本也会随着服务器启动。
效果
总结
至此,通过一个简易的脚本即可实现服务器的状态监控。
© 版权声明
文章:使用Python监控服务器在线状态
作者:Guangran
链接:https://www.rsecc.cn/955.html
声明:如无特别说明本文即为原创文章仅代表个人观点,版权归《广然笔记》所有,未经授权、请勿转载。
版权归原作者 广然 所有, 如有侵权,请联系我们删除。