2026.06.05 | youres | 23次围观
为什么需要定时巡检重定向
网站重定向问题是运维日常排查的重点之一。手动检测效率低下,通过 crontab 定时任务配合 curl 脚本实现自动化巡检,可以让问题无处遁形。定时巡检的优势在于:
- 主动发现问题:在用户投诉前发现异常
- 追踪变化趋势:记录历史数据便于分析
- 自动化解放人力:无需人工逐个检查
- 覆盖面广:可同时监控数十上百个URL
crontab基础知识
crontab 是 Linux 系统的定时任务管理工具,基本语法:
* * * * * 命令
│ │ │ │ │
│ │ │ │ └─ 星期几 (0-7, 0和7都表示周日)
│ │ │ └─── 月份 (1-12)
│ │ └───── 日期 (1-31)
│ └─────── 小时 (0-23)
└───────── 分钟 (0-59)
常用示例:
# 每5分钟执行一次
*/5 * * * * /opt/scripts/check_redirect.sh
# 每小时整点执行
0 * * * * /opt/scripts/hourly_check.sh
# 每天凌晨2点执行
0 2 * * * /opt/scripts/daily_report.sh
# 每周一早上8点执行
0 8 * * 1 /opt/scripts/weekly_check.sh
方案一:基础定时检测脚本
最简单的方案是针对固定URL列表进行周期性检测。
#!/bin/bash
# /opt/scripts/redirect_cron.sh
LOG_FILE="/var/log/redirect_monitor.log"
URL_LIST="/etc/monitor/urls.txt"
MAX_REDIRECTS=5
echo " 开始巡检..." >> ""
while IFS= read -r url; do
[ -z "" ] && continue
redirects=
if [ -z "" ]; then
echo " [错误] 检测失败" >> ""
continue
fi
if [ "" -gt "" ]; then
echo " [告警] 重定向次数: " >> ""
else
echo " [正常] 重定向次数: " >> ""
fi
sleep 0.5
done < ""
echo " 巡检完成" >> ""
配置 crontab:
# 每10分钟检测一次
*/10 * * * * /opt/scripts/redirect_cron.sh
方案二:带告警的定时巡检
在检测到异常时主动发送告警通知。
#!/bin/bash
# /opt/scripts/redirect_alert_cron.sh
URL_LIST="/etc/monitor/urls.txt"
MAX_REDIRECTS=5
WEBHOOK_URL="https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN"
LOG_FILE="/var/log/redirect_alert.log"
alert_count=0
while IFS= read -r url; do
[ -z "" ] && continue
redirects=
final_url=
if [ "" -gt "" ]; then
message="重定向超限告警\nURL: \n最终地址: \n跳转次数: \n阈值: "
curl -s -X POST "" \
-H "Content-Type: application/json" \
-d "{\"msgtype\":\"text\",\"text\":{\"content\":\"\"}}" > /dev/null
echo " [告警] -> ( 次)" >> ""
((alert_count++))
fi
sleep 1
done < ""
if [ "" -gt 0 ]; then
echo " 本次巡检发现 个异常" >> ""
fi
方案三:生成日报的定时任务
每天生成巡检报告,便于长期追踪。
#!/bin/bash
# /opt/scripts/daily_redirect_report.sh
URL_LIST="/etc/monitor/urls.txt"
REPORT_DIR="/var/log/redirect_reports"
DATE=
REPORT_FILE="/report_.csv"
mkdir -p ""
echo "时间,URL,最终URL,重定向次数,状态码,耗时(秒)" > ""
while IFS= read -r url; do
[ -z "" ] && continue
result=
redirects=
final_url=
http_code=
time_total=
echo ",,,,," >> ""
sleep 1
done < ""
total=
alert_lines=
curl -s -X POST "https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"msgtype\":\"text\",\"text\":{\"content\":\"重定向巡检日报\n日期: \n检测URL数: \n异常数量: \n报告路径: \"}}"
crontab 配置:
# 每天凌晨2点生成日报
0 2 * * * /opt/scripts/daily_redirect_report.sh
日志轮转配置
长期运行定时任务会产生大量日志,需要配置日志轮转。
创建 /etc/logrotate.d/redirect-monitor:
/var/log/redirect_monitor.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 0644 root root
}
/var/log/redirect_reports/*.csv {
monthly
rotate 12
compress
missingok
}
多层级定时任务配置
针对不同检测需求,可以配置多个层级的定时任务:
# 高频检测:每5分钟检查核心域名
*/5 * * * * /opt/scripts/check_core_urls.sh
# 常规检测:每小时检查所有域名
0 * * * * /opt/scripts/check_all_urls.sh
# 日报生成:每天凌晨
0 2 * * * /opt/scripts/generate_daily_report.sh
# 周报汇总:每周一早上
0 8 * * 1 /opt/scripts/generate_weekly_report.sh
常见问题
脚本在终端正常但crontab执行失败
常见原因:
- 环境变量缺失:在脚本开头添加
source /etc/profile或显式设置 PATH - 路径问题:使用绝对路径而非相对路径
- 权限问题:确保脚本有执行权限
chmod +x script.sh
解决方法:
#!/bin/bash
export PATH=/usr/local/bin:/usr/bin:/bin
source /etc/profile
总结
通过 crontab 定时任务配合 curl 脚本,可以实现网站重定向的自动化巡检。核心要点:
- 使用
curl -w num_redirects统计跳转次数 - 合理设置检测频率避免服务器压力
- 配置日志轮转防止日志膨胀
- 多层级定时任务满足不同需求
- 异常告警确保问题及时发现
这套方案成本低、实现简单,是网站运维的实用工具。
相关文章
版权声明
本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论