Shell脚本自动检测网站连通性

网站偶尔打不开,但等用户反馈时已经晚了。
本文教你用一段Shell脚本定时检测网站是否正常,发现异常自动推送到微信,零基础也能在十分钟内配好。

先想清楚:脚本要检测什么、多久跑一次

核心逻辑很简单:用 curl 访问目标网址,根据返回的HTTP状态码或超时时间判断是否正常。
如果异常,就调用企业微信机器人的Webhook地址发一条消息。

检测频率建议从每5分钟一次开始,既能及时发现故障,又不会给服务器和微信造成压力。

准备工作:拿到Webhook地址和检测目标

你需要在企业微信群里添加一个机器人,操作路径是:群聊 → 右上角更多 → 群机器人 → 添加机器人 → 自定义。
创建后会得到一个类似 https://qyapi.weixin.qq.com/cgi-bin/webhook/send?
key=你的KEY
的地址,复制保存。

同时确定要检测的网址,比如 https://www.example.com
注意把示例网址换成你自己的真实域名。

编写检测脚本

在服务器上创建脚本文件,路径建议放在 /opt/scripts/check_site.sh

#!/bin/bash

WEBHOOK="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=你的KEY"
URL="https://你的域名"
TIMEOUT=10

HTTP_CODE=$(curl -o /dev/null -s -w "%{http_code}" --connect-timeout $TIMEOUT "$URL")

if [ "$HTTP_CODE" != "200" ]; then
  MSG="网站异常告警\n域名:$URL\n状态码:$HTTP_CODE\n时间:$(date '+%Y-%m-%d %H:%M:%S')"
  curl -s -H "Content-Type: application/json" -d "{\"msgtype\": \"text\", \"text\": {\"content\": \"$MSG\"}}" "$WEBHOOK"
fi

保存后赋予执行权限:

chmod +x /opt/scripts/check_site.sh

脚本只做一件事:如果状态码不是200,就发微信。
正常时不发消息,避免打扰。

设置定时任务

crontab -e 编辑当前用户的定时任务,加入一行:

*/5 * * * * /opt/scripts/check_site.sh > /dev/null 2>&1

这表示每5分钟执行一次。> /dev/null 2>&1 用来丢弃正常输出,防止日志堆积。

保存后可以用 crontab -l 查看是否生效。

避坑指南:这些细节容易翻车

权限问题:如果脚本用root用户跑,确保 /opt/scripts/ 目录和脚本文件对root可读可执行。

curl未安装:部分精简系统没有curl,先执行 which curl 确认,没有就用 apt install curlyum install curl 安装。

微信收不到消息:检查Webhook地址是否完整,key有没有复制错。
可以在命令行手动执行一次脚本,把 if 条件临时改成 if [ "$HTTP_CODE" !
= "200" ] || true
来强制触发一次,确认机器人能收到消息。

误报太多:如果网站偶尔响应慢但没挂,可以增加重试逻辑,比如连续两次检测失败才告警。

状态码判断太严格:有些网站返回301或302重定向,这是正常的。
可以把判断条件改成 if [ "$HTTP_CODE" -ge 400 ],只对4xx和5xx告警。

验证脚本是否正常工作

手动执行一次脚本:

/opt/scripts/check_site.sh

如果网站正常,终端不会有输出。
这时可以把脚本里的URL临时改成一个不存在的地址,再执行一次,微信应该立刻收到告警。
收到后改回真实地址。

最后确认定时任务在跑:等5分钟,查看微信是否收到消息(正常网站不会收到),或者用 tail -f /var/log/cron 观察任务执行记录。

常见疑问

检测多个网站怎么办?
可以把URL写成一个列表,用 for 循环遍历,每个网址单独判断。

能不能检测到网站内容变化?
可以,用 curl -s 获取页面内容,再和上次保存的内容做对比。但这会增加复杂度,建议先用连通性检测满足基本需求。

服务器本身断网了怎么办?
这个脚本无法处理服务器完全离线的情况,因为脚本本身也跑不了。如果需要这种级别的监控,建议用外部监控服务。

企业微信机器人有频率限制吗?
企业微信对机器人发消息有频率限制,建议实际使用中避免过于频繁的告警,比如设置告警后一段时间内不重复发送。

到这里,一个轻量的网站连通性监控就搭好了。
命令和路径都可以根据你的环境调整,关键是先跑通一次手动触发,确认微信能收到消息,再交给定时任务。

分享到:
上一篇
Ansible批量更新多台服务器系统补丁
下一篇
机房巡检表模板,服务器机柜日常检查项目:机房巡检表模板
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意