CMS程序定时清理缓存,自动释放服务器内存
网站运行久了,CMS程序缓存文件越积越多,服务器内存被慢慢吃满,轻则后台卡顿,重则数据库连接失败。
解决这个问题最省心的办法,就是让系统定时清理缓存并自动释放内存,不需要每天手动登录操作。
下面按零基础也能照做的步骤,分别给出宝塔面板和纯命令行两种方案。
先搞清楚你的CMS缓存放在哪
不同CMS的缓存目录不一样,清理前必须确认路径,否则可能误删网站数据。
- WordPress:缓存通常在
wp-content/cache/,如果装了缓存插件,路径可能在该插件目录下,例如wp-content/plugins/wp-rocket/cache/。 - 帝国CMS:缓存目录一般是
e/data/下的临时文件和d/file/里的缩略图缓存,建议在后台“系统设置”里查看具体路径。 - 织梦DedeCMS:常见位置是
data/cache/和data/tplcache/。 - 其他CMS:在程序根目录搜索
cache文件夹,或者查看程序官方文档确认。
判断缓存是否该清理的信号:服务器内存占用持续超过80%,CMS后台操作变慢,df -h 查看磁盘空间没有明显变化但网站加载时间变长。
方案一:宝塔面板设置定时任务
适合不熟悉命令行的用户,全程鼠标操作。
- 登录宝塔面板,左侧菜单点击 计划任务。
- 点击 添加任务,任务类型选择 Shell脚本。
- 任务名称填写
清理CMS缓存并释放内存。 - 执行周期根据网站流量选择:中小型站点建议 每天凌晨3点 执行一次;访问量大的站点可以设为 每6小时 一次。
- 脚本内容按下面填写,注意把
/www/wwwroot/你的网站目录替换成实际路径:
#!/bin/bash
# 清理WordPress缓存示例
rm -rf /www/wwwroot/你的网站目录/wp-content/cache/*
# 清理系统缓存并释放内存
sync && echo 3 > /proc/sys/vm/drop_caches
- 点击 保存,然后点击该任务右侧的 执行 按钮测试一次。
注意:echo 3 > /proc/sys/vm/drop_caches 需要root权限,宝塔计划任务默认以root运行,通常可以直接执行。
如果提示权限不足,在脚本开头加上 sudo 或确认面板是以root身份登录。
方案二:Linux命令行配置crontab
如果你用的是纯命令行服务器,或者想更精细地控制,直接用crontab。
先创建清理脚本:
vim /root/clean_cms_cache.sh
写入以下内容:
#!/bin/bash
# CMS缓存目录,根据实际情况修改
CACHE_DIR="/www/wwwroot/your_site/wp-content/cache"
# 删除缓存文件,保留目录本身
find $CACHE_DIR -type f -delete
# 释放被占用的内存缓存
sync && echo 3 > /proc/sys/vm/drop_caches
# 记录执行时间,便于排查
echo "Cache cleaned at $(date)" >> /var/log/cms_cache_clean.log
赋予执行权限:
chmod +x /root/clean_cms_cache.sh
然后编辑crontab:
crontab -e
添加一行,表示每天凌晨3点执行:
0 3 * * * /root/clean_cms_cache.sh
保存退出后,可以用 crontab -l 确认任务已添加。
结论:无论用宝塔还是crontab,核心都是“找到缓存目录 → 写清理脚本 → 设置定时执行”,区别只是操作界面不同。
避坑指南:这几点不注意会出问题
- 不要直接删除缓存目录本身:用
rm -rf 目录/*而不是rm -rf 目录,否则CMS可能因为找不到缓存目录而报错。 - 清理前确认没有正在进行的写入操作:如果网站正在被访问,突然清空缓存可能导致个别用户请求变慢,建议在低峰期执行。
drop_caches不要频繁使用:这个命令会清空系统文件缓存,频繁执行反而增加磁盘IO。每天一次足够,内存特别小的机器可以改为每12小时一次。- 测试脚本时先手动跑一遍:
bash /root/clean_cms_cache.sh,看有没有报错,确认缓存文件确实被清理了。 - 日志要保留:脚本里加了日志输出,方便你回头检查任务到底有没有执行成功。
怎么验证清理和内存释放真的生效了
执行完任务后,用下面几个命令确认效果:
查看内存变化:
free -h
对比执行前后的 available 列,如果之前内存紧张,执行后可用内存应该明显增加。
查看缓存目录是否已清空:
ls -lh /www/wwwroot/your_site/wp-content/cache/
如果目录下没有大量文件,说明清理成功。
查看日志确认任务执行记录:
tail -20 /var/log/cms_cache_clean.log
判断标准:如果日志里有新的时间记录,且 free -h 显示可用内存上升,说明定时清理缓存并自动释放服务器内存的流程已经跑通。
常见疑问
问:清理缓存后网站第一次访问变慢正常吗?
正常。缓存被清空后,CMS需要重新生成页面缓存,第一次访问会稍慢,之后恢复正常。如果长时间不恢复,检查缓存目录权限是否正确。
问:drop_caches 会不会影响正在运行的服务?
这个命令只释放文件系统缓存,不会杀掉进程或丢失数据。但建议在业务低峰执行,避免短暂IO升高影响体验。
问:我的CMS没有独立缓存目录怎么办?
有些CMS把缓存写进数据库或内存组件(如Redis)。这种情况下,定时清理应改为重启Redis或执行CMS自带的清理命令,具体参考程序官方文档。
问:定时任务没有执行,怎么排查?
先检查crontab服务是否运行:systemctl status crond。再确认脚本路径是绝对路径,且脚本有执行权限。宝塔用户可以在计划任务日志里看执行记录。
按上面步骤配置完成后,建议观察两三天内存曲线,再根据实际情况调整执行频率。
如果服务器内存本身较小,除了定时清理,也可以考虑优化CMS的缓存策略,减少缓存生成量。