0

curl批量重定向检测crontab定时任务:3个实战方案让网站巡检自动化

2026.06.05 | youres | 22次围观

为什么需要定时巡检重定向

网站重定向问题是运维日常排查的重点之一。手动检测效率低下,通过 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执行失败

常见原因:

  1. 环境变量缺失:在脚本开头添加 source /etc/profile 或显式设置 PATH
  2. 路径问题:使用绝对路径而非相对路径
  3. 权限问题:确保脚本有执行权限 chmod +x script.sh

解决方法:

#!/bin/bash
export PATH=/usr/local/bin:/usr/bin:/bin
source /etc/profile

总结

通过 crontab 定时任务配合 curl 脚本,可以实现网站重定向的自动化巡检。核心要点:

  • 使用 curl -w num_redirects 统计跳转次数
  • 合理设置检测频率避免服务器压力
  • 配置日志轮转防止日志膨胀
  • 多层级定时任务满足不同需求
  • 异常告警确保问题及时发现

这套方案成本低、实现简单,是网站运维的实用工具。

相关文章

版权声明

本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论