VPS/云主机等
优惠信息分享

监控家庭网络(访问网站)状况,并实时推送到微信/钉钉

监控家庭网络(访问网站)状况,并实时推送到微信/钉钉插图

这个是我随便写的一个小脚本,目的是为了监控家里网络是否连通谷歌,当连通不了的时候会通道到微信,那我就知道该调整下了,当然了,这个也可以用来监控其他网站是否正常,但是请注意,这个不是用来监控是否断网,没网也推送不了啊,,,,那得靠外部设备。

先放个效果图,每隔5分钟访问谷歌(都可以自定义),如果访问超时,则发送post请求到微信,这样就可以及时知道有问题了,到时候回家或者立刻远程更换就行,八小时内持续故障只会通知一次(恢复访问后又出现故障,则不会算在8小时内),故障解除也不会通知,尽可能的免打扰。

监控家庭网络(访问网站)状况,并实时推送到微信/钉钉插图1

那就得说一下为什么需要这个,因为某些工具偶尔会失效,那通常来说得对应网站访问不上才发现寄了,不如做个通知,寄了后立刻发现立刻更换,当然得手动更换,不过想要自动更换应该也可以吧?以后再试试行不行。这个脚本本质上是url访问对应web,访问失败则发送通知,就这么简单。

一、编写脚本文件

先在自己的文件夹建立新建web-monitoring.sh文件,粘贴以下代码,可以用nano编写,记得修改成自己的推送url,只要支持post就行,不限各类公共推送服务、钉钉、企业微信这种:

#!/bin/ash

# 配置参数
URL="https://www.google.com"
#可自行更换其他url
TIMEOUT=10
NOTIFY_URL="http://mepush.xyz/?sendkey=111111&msg="
#自己的微信/钉钉推送地址,可以用公共的也可以自己部署的都行
NOTIFY_INTERVAL=28800
# 持续故障8小时(单位:秒)只触发一次
LAST_NOTIFICATION_FILE="/root/web-monitoring/last_notification_time"
# 记录上次通知时间
PREV_STATE_FILE="/root/web-monitoring/prev_state"
# 记录上次网络状态

# 发送通知的函数
send_notification() {
localmessage="google连通失败,注意网络状况"
#替换成自需要自定义的文本,包括下面的具体参数
curl -s"$NOTIFY_URL&msg=$message"
}

# 初始化或读取上次通知时间
if[ -f"$LAST_NOTIFICATION_FILE"];then
last_notification_time=$(cat"$LAST_NOTIFICATION_FILE")
else
last_notification_time=0
# 从未通知过
echo0 >"$LAST_NOTIFICATION_FILE"
fi

# 初始化网络状态
if[ -f"$PREV_STATE_FILE"];then
prev_state=$(cat"$PREV_STATE_FILE")
else
prev_state="unknown"
# 初始状态未知
echo"unknown">"$PREV_STATE_FILE"
fi

# 主循环
whiletrue;do
# 获取当前时间(每次循环都重新获取)
current_time=$(date+%s)

# 检测网络连通性
curl --max-time$TIMEOUT-s -o /dev/null"$URL"
network_ok=$?

# 处理网络故障
if["$network_ok"-ne 0 ];then
# 如果之前状态不是故障,标记为故障并立即通知
if["$prev_state"!="failed"];then
send_notification
echo"$current_time">"$LAST_NOTIFICATION_FILE"
last_notification_time=$current_time
echo"failed">"$PREV_STATE_FILE"
prev_state="failed"
else
# 如果已经是故障状态,检查是否超过8小时
time_since_last_notification=$((current_time - last_notification_time))
if["$time_since_last_notification"-ge"$NOTIFY_INTERVAL"];then
send_notification
echo"$current_time">"$LAST_NOTIFICATION_FILE"
last_notification_time=$current_time
fi
fi
else
# 网络恢复时更新状态
if["$prev_state"!="ok"];then
echo"ok">"$PREV_STATE_FILE"
prev_state="ok"
fi
fi

# 5分钟循环,可自定义事件,单位为秒
sleep300
done

注意,这个文件夹等下是要映射到docker的,具体就路径随便,等下映射的时候能对上就行。

监控家庭网络(访问网站)状况,并实时推送到微信/钉钉插图2

二、建立docker-alpine

需要手动建立一个docker-alpine,为什么我不直接用现成的docker?因为是手搓的脚本,需要自行在alpine上运行,当然了其他系统都可以,如果要运行在非alpine系统上,需要手动修改脚本,对应的自启命令也需要做修改。

至于部署docker-alpine没啥难度,下载alpine镜像部署就行,只需要映射一个目录用来存放脚本文件,这里容器内部目录可以自定义,我就设置了/root/web-monitoring,如果你想设为其他路径都行,这个没影响,反正是docker内部的目录。注意,映射的文件需要和刚刚的路径对应上。网络部分直接桥或者host模式都行,也不用开放任何端口。

监控家庭网络(访问网站)状况,并实时推送到微信/钉钉插图3监控家庭网络(访问网站)状况,并实时推送到微信/钉钉插图4

然后我们还需要修改启动命令,额外添加一条启动命令,注意,这里的路径也要和上面映射容器内路径对应上:

/root/web-monitoring/web-monitoring.sh监控家庭网络(访问网站)状况,并实时推送到微信/钉钉插图5

部署好后就可以启动docker-alpine了(以下我简称alpine,不再赘述docker环境)。我们还需要进入到docker终端,这里终端连接命令是“/bin/sh”而不是常规的“/bin/bash”,因为alpine默认是没bash环境。进入终端就可以查看到已经有"/root/web-monitoring"文件夹了。

监控家庭网络(访问网站)状况,并实时推送到微信/钉钉插图6监控家庭网络(访问网站)状况,并实时推送到微信/钉钉插图7

三、安装环境

此时,我们直接启动docker日志是会报错的,因为此时alpine内没有curl,所以还需要手动安装下curl:

apkupdate
apkaddcurl监控家庭网络(访问网站)状况,并实时推送到微信/钉钉插图8监控家庭网络(访问网站)状况,并实时推送到微信/钉钉插图9

安装好curl后重启容器,此时脚本就可以正常工作了。想要确定是否正常工作,只要断开对应的工具,连不上谷歌后,微信就会收到对应的推送,持续的故障8小时内只会推送一次,但如果恢复后再次故障,依然会推送通知。

监控家庭网络(访问网站)状况,并实时推送到微信/钉钉插图10

不过我写完后才发现原来就有“alpine/curl”这种镜像,那也可以不手动安装curl,直接部署“alpine/curl”并配置对应的启动命令就行了。

赞(0)
未经允许不得转载:遗弃你|YIQINI.COM » 监控家庭网络(访问网站)状况,并实时推送到微信/钉钉

评论 抢沙发

评论前必须登录!

 

登录

找回密码

注册