Linux 下自动监控 URL 状态的脚本示例

发布时间 - 2025-12-05 00:00:00    点击率:
可用curl配合cron实现轻量级URL监控:基础版检查HTTP状态码是否为2xx/3xx,增强版增加响应时间与关键词校验,支持告警去重及日志记录,每分钟执行一次。

可以用 curl 配合定时任务(cron)实现轻量级 URL 可用性监控,无需额外安装复杂工具。

基础检测脚本(检查 HTTP 状态码)

以下脚本会请求目标 URL,判断返回状态码是否为 2xx 或 3xx,不是则发邮件或记录日志:

#!/bin/bash
URL="https://example.com/health"
LOG="/var/log/url-monitor.log"
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')

发送请求并获取状态码(不输出 body,超时 10 秒)

STATUS_CODE=$(curl -s -o /dev/null -w "%{http_code}" --max-time 10 "$URL" 2>/dev/null)

if [[ "$STATUS_CODE" =~ ^[23][0-9][0-9]$ ]]; then echo "[$TIMESTAMP] OK: $URL → $STATUS_CODE" >> "$LOG" else echo "[$TIMESTAMP] ALERT: $URL → $STATUS_CODE" >> "$LOG"

可选:发送邮件提醒(需系统已配置 mail 命令)

# echo "URL $URL down, status $STATUS_CODE" | mail -s "URl Down Alert" admin@example.com

fi

增强版:同时检查响应时间和关键词

有些服务返回 200 却内容异常(如报错页),可补充检查响应体中是否包含预期关键词:

# 在原脚本中替换判断部分:
RESPONSE=$(curl -s --max-time 10 "$URL" 2>/dev/null)
STATUS_CODE=$(echo "$RESPONSE" | head -n1 | grep -oE 'HTTP/[0-9.]+ [0-9]{3}' | awk '{print $2}' | tail -n1)
# 若没取到状态码,fallback 到 curl 的 w 输出
if [ -z "$STATUS_CODE" ]; then
    STATUS_CODE=$(curl -s -o /dev/null -w "%{http_code}" --max-time 10 "$URL" 2>/dev/null)
fi

检查关键词(例如页面含 "OK" 或 "healthy")

if [[ "$STATUS_CODE" =~ ^[23][0-9][0-9]$ ]] && echo "$RESPONSE" | grep -q -i "healthy|OK|up"; then echo "[$TIMESTAMP] OK: $URL → $STATUS_CODE (keyword found)" else echo "[$TIMESTAMP] ALERT: $URL → $STATUS_CODE (or keyword missing)" fi

加入简单告警去重(避免重复刷屏)

连续失败时只在首次和恢复时通知,减少干扰:

  • 用一个临时文件记录上次状态(如 /tmp/url-status.flag
  • 脚本运行前读取该文件,对比当前结果;仅当状态从 ok→fail 或 fail→ok 时触发告警
  • 每次运行后更新 flag 文件内容(例如写入 updown

添加到 cron 每分钟执行一次

编辑 root 的 crontab(sudo crontab -e),添加:

# 每分钟检查一次(生产环境建议 30s–5min 根据需求调整)
* * * * * /path/to/monitor-url.sh >/dev/null 2>&1

注意赋予脚本执行权限:chmod +x /path/to/monitor-url.sh

基本上就这些。小团队或个人项目够用,要长期稳定可用,建议后续加上日志轮转、失败重试、多 URL 支持等扩展点。


# linux  # word  # 工具  # curl  # ai  # 状态码 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何用VPS主机快速搭建个人网站?  如何获取免费开源的自助建站系统源码?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  Laravel怎么实现验证码(Captcha)功能  高端云建站费用究竟需要多少预算?  js代码实现下拉菜单【推荐】  在线教育网站制作平台,山西立德教育官网?  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  网站制作壁纸教程视频,电脑壁纸网站?  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  QQ浏览器网页版登录入口 个人中心在线进入  javascript日期怎么处理_如何格式化输出  Laravel如何使用Blade模板引擎?(完整语法和示例)  Laravel如何使用Sanctum进行API认证?(SPA实战)  移动端脚本框架Hammer.js  Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程  Bootstrap整体框架之JavaScript插件架构  如何为不同团队 ID 动态生成多个独立按钮  音乐网站服务器如何优化API响应速度?  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  利用JavaScript实现拖拽改变元素大小  JS弹性运动实现方法分析  详解阿里云nginx服务器多站点的配置  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  如何在云服务器上快速搭建个人网站?  iOS正则表达式验证手机号、邮箱、身份证号等  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  Laravel集合Collection怎么用_Laravel集合常用函数详解  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  大同网页,大同瑞慈医院官网?  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像  再谈Python中的字符串与字符编码(推荐)  如何用花生壳三步快速搭建专属网站?  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  电商网站制作价格怎么算,网上拍卖流程以及规则?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  Laravel PHP版本要求一览_Laravel各版本环境要求对照  Laravel如何使用查询构建器?(Query Builder高级用法)  如何用搬瓦工VPS快速搭建个人网站?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  千库网官网入口推荐 千库网设计创意平台入口  如何快速查询网站的真实建站时间?  如何快速生成ASP一键建站模板并优化安全性?