海外CDN节点缓存清理定时任务脚本怎么写?附完整Shell示

海外CDN节点缓存清理如果不做成定时任务,就只能每天登录控制台手动刷新,费时还容易漏掉新增的URL。
本文用一套可直接复制的Shell脚本和crontab配置,帮你实现按小时自动清理指定的CDN缓存,整个过程不需要懂复杂的编程,照着做就能跑起来。

先搞清楚你要调哪个接口

不同CDN服务商的清理方式不太一样,但主流厂商基本都提供了HTTP API接口。
以常见的海外CDN服务为例,你需要提前拿到三样东西:

  • API Key或Token:在CDN控制台的“API管理”或“密钥管理”里生成
  • Zone ID或加速域名ID:一般对应你要清理的站点或域名
  • 缓存清理接口地址:通常在官方API文档里能找到,比如 purge/cache 这类路径

如果你用的是自建边缘节点或开源CDN面板,接口路径会不同,但思路一致:让服务器用自己的身份凭证去请求清理接口,而不是每次都打开网页操作。

编写缓存清理脚本

建议在服务器上新建一个目录专门放运维脚本,避免文件散落。
执行:

mkdir -p /opt/cdn-purge && cd /opt/cdn-purge

创建脚本文件:

vim purge_cdn_cache.sh

按你的实际情况修改下面的示例脚本,把 YOUR_API_KEYYOUR_ZONE_ID 和接口地址替换成真实值:

#!/bin/bash
# 海外CDN节点缓存清理定时任务脚本
# 用法:手动执行或配合crontab定时运行

API_KEY="YOUR_API_KEY"
ZONE_ID="YOUR_ZONE_ID"
API_URL="https://api.yourcdn.com/v1/zones/${ZONE_ID}/purge_cache"

# 要清理的URL列表,一个URL一行
URLS=(
  "https://img.example.com/a.jpg"
  "https://img.example.com/b.jpg"
)

# 把URL数组转成JSON格式
PAYLOAD=$(printf '{"urls":[%s]}' "$(printf '"%s",' "${URLS[@]}" | sed 's/,$//')")

# 调用API清理缓存
RESPONSE=$(curl -s -X POST "$API_URL" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d "$PAYLOAD")

# 输出结果到日志
echo "$(date '+%Y-%m-%d %H:%M:%S') $RESPONSE" >> /var/log/cdn_purge.log

# 简单判断请求是否成功
if echo "$RESPONSE" | grep -q '"success":true'; then
    echo "CDN缓存清理成功"
else
    echo "CDN缓存清理失败,请检查API配置或稍后重试"
fi

保存后给脚本添加执行权限:

chmod +x purge_cdn_cache.sh

先手动运行一次,确认接口能通、日志有输出:

./purge_cdn_cache.sh

看到 CDN缓存清理成功 或日志里有正常返回,就说明脚本本身没问题。

配置定时任务自动执行

打开当前用户的crontab:

crontab -e

如果是第一次编辑,会提示选择编辑器,按 2 选vim即可。
加入下面这行,代表每天凌晨3点执行一次:

0 3 * * * /opt/cdn-purge/purge_cdn_cache.sh >> /var/log/cdn_purge_cron.log 2>&1

如果你想每6小时清理一次,可以改成:

0 */6 * * * /opt/cdn-purge/purge_cdn_cache.sh >> /var/log/cdn_purge_cron.log 2>&1

保存退出后,查看定时任务是否写入:

crontab -l

看到刚才那行就说明配置成功。
注意脚本路径必须写绝对路径,crontab环境变量很少,别用相对路径。

这些坑一定得避开

URL必须和CDN上的缓存Key完全一致。 比如你配置的是HTTPS,就不要写 http:// 开头的地址;
结尾带不带斜杠也要严格匹配,否则清理接口不会报错,但缓存实际没清掉。

脚本里不要硬编码敏感信息到后提交的日志里。 建议把日志里的API Key用 sed 先替换再存储,或者直接在服务器上限制日志文件的读取权限:

chmod 600 /var/log/cdn_purge.log

注意CDN服务商对API调用频率的限制。 部分海外CDN按分钟或按天限制清理请求次数,脚本里如果批量提交太多URL,容易触发限流。
建议每次提交不超过100条,或者分批处理。

crontab里别忘记给脚本执行权限。 如果定时任务不执行,最优先检查的就是这两个命令:

which php
bash -x /opt/cdn-purge/purge_cdn_cache.sh

怎么确认定时清理真的生效

定时任务跑完不要只看日志就完事,还要实际验证缓存是否刷新:

  1. 在浏览器打开你要清理的URL,按 F12 进入开发者工具,切换到 Network 标签。
  2. 刷新页面,找到对应的响应请求,查看响应头里的 x-cacheage 字段。
  3. 如果值显示为 MISSage 很小,说明缓存已重新回源,清理成功。

你还可以写一个简单的检查脚本,定时抓取URL响应头并记录状态:

curl -I -s https://img.example.com/a.jpg | head -20

把这条命令加到刚才的脚本后面,就能在清理后自动追踪远端节点的缓存状态。

常见疑问:如果CDN服务商同时有多个海外节点,脚本里的接口会自动广播到所有节点,不需要每个节点单独设置。
如果你用的是国内加海外的混合CDN,记得确认API接口的作用域是否包含全部区域。
另外,定时任务的执行时间尽量放在站点访问低峰期,比如凌晨3点到5点,这样即使清理后有短暂回源,也不会影响访客体验。

分享到:
上一篇
容器数据卷持久化配置防止模型文件丢失
下一篇
爬虫抓取失败防火墙与站点整改完整清单
1
系统公告

机房迁移升级通知

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