Shell脚本自动清理网站缓存,定时释放资源

网站运行久了,缓存文件会越积越多,不仅占用磁盘空间,还可能拖慢响应速度。
手动清理费时费力,用Shell脚本自动清理网站缓存并配合定时任务释放资源,是运维中很实用的一招。
下面从零开始,带你写出能直接跑的脚本并设置好定时执行。

先搞清楚要清理哪些缓存

不同环境缓存位置不一样,动手前先确认你的网站缓存类型。
常见的有:

  • Nginx缓存:通常在 /var/cache/nginx 或配置文件中 proxy_cache_path 指定的目录。
  • PHP缓存:如OPcache(内存中,重启PHP-FPM生效)、ThinkPHP的 runtime/cache、Laravel的 storage/framework/cache。
  • 宝塔面板缓存:网站根目录下的 runtime 文件夹,或面板自带的缓存清理功能。
  • CDN缓存:一般通过API刷新,不在本文脚本范围。

判断依据:登录服务器,用 du -sh /path/to/cache 查看缓存目录大小,确认路径后再写脚本。

编写清理脚本

创建一个脚本文件,比如 /root/clean_cache.sh,内容如下:

#!/bin/bash
# 清理网站缓存脚本
# 定义缓存目录,按实际路径修改
CACHE_DIRS=(
  "/www/wwwroot/your_site/runtime/cache"
  "/var/cache/nginx"
)

# 日志文件
LOG_FILE="/var/log/clean_cache.log"

# 记录开始时间
echo "$(date '+%Y-%m-%d %H:%M:%S') 开始清理缓存" >> "$LOG_FILE"

for DIR in "${CACHE_DIRS[@]}"; do
  if [ -d "$DIR" ]; then
    # 删除目录下所有内容,保留目录本身
    rm -rf "$DIR"/*
    echo "已清理: $DIR" >> "$LOG_FILE"
  else
    echo "目录不存在,跳过: $DIR" >> "$LOG_FILE"
  fi
done

# 可选:重启PHP-FPM释放内存缓存(根据实际服务名调整)
# systemctl restart php-fpm

echo "$(date '+%Y-%m-%d %H:%M:%S') 清理完成" >> "$LOG_FILE"

关键点:

  • CACHE_DIRS 数组里填入你实际要清理的目录,多个目录用空格隔开。
  • 使用 rm -rf "$DIR"/* 只删除目录内文件,不删除目录本身,避免权限问题。
  • 日志记录方便排查,建议保留。

保存后赋予执行权限:

chmod +x /root/clean_cache.sh

先手动运行一次,检查是否有报错:

/root/clean_cache.sh

然后查看日志确认:

cat /var/log/clean_cache.log

设置定时任务自动执行

用 crontab 让脚本每天凌晨3点跑一次:

crontab -e

在末尾添加一行:

0 3 * * * /bin/bash /root/clean_cache.sh

保存退出。注意:如果脚本中用到 systemctl 等命令,建议写绝对路径,比如 /bin/systemctl,因为crontab环境变量可能不全。

查看当前定时任务:

crontab -l

避坑指南

  • 权限问题:脚本要以root或对缓存目录有写权限的用户运行,否则 rm 会失败。可以在脚本开头加 [ "$(id -u)" -eq 0 ] || { echo "需要root权限"; exit 1; } 做检查。
  • 误删风险:rm -rf 很危险,务必确认 CACHE_DIRS 路径正确,不要写成 / 或网站根目录。可以先 echo 出要删除的路径测试。
  • 缓存目录不存在:脚本已做判断,但如果你用了变量拼接,注意路径末尾不要多写斜杠。
  • 服务重启:如果清理OPcache需要重启PHP-FPM,建议放在低峰期,并确保服务名正确(如 php-fpm 或 php7.4-fpm)。
  • 日志轮转:长期运行日志会变大,可用 logrotate 或定期清空日志文件。

验证清理效果

执行脚本后,用以下命令检查:

du -sh /www/wwwroot/your_site/runtime/cache

对比清理前后的大小,如果明显变小,说明生效。
同时观察网站访问是否正常,缓存重建是正常现象。

可独立摘录的结论:

  • Shell脚本清理缓存的核心是准确定位缓存目录,并用 rm -rf 删除内容而非目录本身。
  • crontab定时任务需使用绝对路径,避免环境变量缺失导致执行失败。
  • 清理前务必确认路径,防止误删;建议先手动运行测试。
  • 清理后通过 du -sh 对比目录大小,可快速验证效果。

常见疑问

脚本执行了但缓存没减少?
检查 CACHE_DIRS 是否写对,以及运行用户是否有权限。查看日志中是否提示“目录不存在”。

定时任务没反应?
确认cron服务是否运行:systemctl status crond。另外检查脚本中命令是否用了绝对路径,crontab的PATH变量很有限。

需要清理内存缓存怎么办?
内存缓存如Redis、Memcached需通过各自命令清理,例如 redis-cli flushall,但会清空所有数据,谨慎使用。

清理频率多高合适?
根据网站更新频率和缓存策略,一般每天一次或每周一次即可。频繁清理可能增加服务器负载。

按照以上步骤,你就能用Shell脚本自动清理网站缓存并定时释放资源,减少手动维护成本。
如果环境特殊,调整目录和服务名后同样适用。

分享到:
上一篇
Ansible模板生成Nginx配置
下一篇
机柜理线架使用规范,强弱电分离布线:机柜理线架使用规范
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意