为什么需要自己写网络监控脚本
家里路由器时不时断网,打游戏卡顿、视频会议掉线,问题出在哪?等运营商来查,一拖就是半天。其实你可以自己动手写个简单的网络监控脚本,定时检测网络通不通,发现问题立马通知你。
比如我邻居老李,每天早上7点准时跑小区门口取快递,结果连续三天没收到短信提醒。后来发现是家里的宽带半夜断了,路由器没自动重连。他自己写了个小脚本,每天每隔10分钟ping一下百度,断了就发微信通知,问题当场解决。
用Python写一个基础监控脚本
Python语法简单,适合新手。下面这个脚本会每5分钟检查一次网络连通性,如果ping不通指定网站,就记录时间并提示。
import os
import time
import datetime
def check_network(host="www.baidu.com"):
response = os.system(f"ping -c 1 {host} > /dev/null 2>&1")
return response == 0
while True:
if check_network():
print(f"{datetime.datetime.now()} 网络正常")
else:
print(f"{datetime.datetime.now()} 网络异常!")
time.sleep(300) # 每5分钟检查一次把这段代码保存成 network_monitor.py,扔在树莓派或者闲置的旧电脑上运行,就能持续盯着网络状态。
加个微信通知更实用
光打印日志不够直观,最好能推送到手机。可以用 Server酱 这类工具,把消息通过微信发给你。
import requests
def send_wechat(msg):
url = "https://sc.ftqq.com/你的SCKEY.send"
data = {
"text": "网络告警",
"desp": msg
}
requests.post(url, data=data)
# 在主循环里改成:
if not check_network():
alert_msg = f"网络在 {datetime.datetime.now()} 中断,请检查!"
send_wechat(alert_msg)替换你的SCKEY,运行后一旦断网,手机马上就能收到提醒,比等客服回复快多了。
进阶:监控局域网设备在线状态
除了外网,内网设备也值得盯一盯。比如你家的智能摄像头、NAS是不是一直在线?可以写个脚本批量ping局域网IP。
import os
ips = ["192.168.1.100", "192.168.1.101", "192.168.1.102"]
for ip in ips:
result = os.system(f"ping -c 1 -W 1 {ip} > /dev/null 2>&1")
if result != 0:
print(f"{ip} 已离线")结合定时任务(cron),每天固定时间跑一次,生成个小报告,谁家设备爱掉线一目了然。
别觉得写脚本是程序员的事,现在这些工具都特别傻瓜化,照着改改就能用。花半小时搭个监控,省下的是以后无数次的排查时间。