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

可以用 curl 配合定时任务(cron)实现轻量级 URL 可用性监控,无需额外安装复杂工具。
以下脚本会请求目标 URL,判断返回状态码是否为 2xx 或 3xx,不是则发邮件或记录日志:
#!/bin/bash
URL="https://example.com/health"
LOG="/var/log/url-monitor.log"
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
<h1>发送请求并获取状态码(不输出 body,超时 10 秒)</h1><p>STATUS_CODE=$(curl -s -o /dev/null -w "%{http_code}" --max-time 10 "$URL" 2>/dev/null)</p><p>if [[ "$STATUS_CODE" =~ ^[23][0-9][0-9]$ ]]; then
echo "[$TIMESTAMP] OK: $URL → $STATUS_CODE" >> "$LOG"
else
echo "[$TIMESTAMP] ALERT: $URL → $STATUS_CODE" >> "$LOG"</p><h1>可选:发送邮件提醒(需系统已配置 mail 命令)</h1><pre class="brush:php;toolbar:false;"># echo "URL $URL down, status $STATUS_CODE" | mail -s "URl Down Alert" admin@example.comfi
有些服务返回 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
<h1>检查关键词(例如页面含 "OK" 或 "healthy")</h1><p>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)up 或 down)编辑 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 下自动监控 URL 状态的脚本示例的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号