织梦缓存目录定期清理脚本
织梦运行过程中会在 /data/cache/、/data/sessions/、/uploads/allimg/ 等目录持续产生缓存和临时文件。长期不清理会导致磁盘占用暴涨、站点变慢、甚至 inode 耗尽。手动清理容易遗漏,最佳方案是写脚本配合定时任务自动执行。本文给出完整的 Shell 脚本和部署方法。
一、织梦需要清理的目录
1. 标签缓存
/data/cache/ —— arclist 等标签的缓存文件,扩展名 .cache 或 .inc。可安全删除,系统会自动重建。
2. Session 文件
/data/sessions/ —— 会员登录、后台登录的 session 文件。过期的 session 可清理,但正在用的不能删。
3. 编辑器临时文件
/uploads/allimg/ 下可能有上传后未引用的孤儿图片,/uploads/userup/ 是会员上传临时目录。
4. 后台操作日志
/data/log/ —— 操作日志,可定期归档或清理。
5. 编译模板缓存
/data/tplcache/ —— 模板编译缓存,改模板后需清理。
二、清理脚本设计原则
- 只删过期文件 —— session 只删超过 24 小时的,缓存全删(可重建)
- 保留目录结构 —— 只删文件不删目录,避免织梦找不到目录报错
- 记录日志 —— 每次清理写日志,方便排查
- 安全防护 —— 路径变量化,避免误删系统文件
- 可回滚 —— 重要数据先打包再清理
三、完整 Shell 脚本
#!/bin/bash
# dedecms_cache_clean.sh
# 织梦缓存定期清理脚本
#=====配置区=====DEDE_ROOT="/www/web/dedecms" # 织梦根目录
LOG_FILE="/var/log/dedecms_clean.log" # 日志文件
SESSION_EXPIRE=86400 # session过期时间(秒),默认24小时
KEEP_DAYS=30 # 日志保留天数
#=====函数区=====log(){
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE
}
#=====检查目录存在=====if [ ! -d "$DEDE_ROOT/data" ]; then
log "错误:织梦目录不存在 $DEDE_ROOT"
exit 1
fi
log "=====开始清理织梦缓存====="
# 1. 清理标签缓存(全删,可重建)
CACHE_DIR="$DEDE_ROOT/data/cache"
if [ -d "$CACHE_DIR" ]; then
COUNT=$(find $CACHE_DIR -type f | wc -l)
find $CACHE_DIR -type f -delete
log "清理标签缓存:删除 $COUNT 个文件"
fi
# 2. 清理过期 session(只删超过24小时的)
SESSION_DIR="$DEDE_ROOT/data/sessions"
if [ -d "$SESSION_DIR" ]; then
COUNT=$(find $SESSION_DIR -type f -mtime +1 | wc -l)
find $SESSION_DIR -type f -mtime +1 -delete
log "清理过期 session:删除 $COUNT 个文件"
fi
# 3. 清理模板编译缓存(全删)
TPLCACHE_DIR="$DEDE_ROOT/data/tplcache"
if [ -d "$TPLCACHE_DIR" ]; then
COUNT=$(find $TPLCACHE_DIR -type f | wc -l)
find $TPLCACHE_DIR -type f -delete
log "清理模板缓存:删除 $COUNT 个文件"
fi
# 4. 归档并清理操作日志(保留最近30天)
LOG_DIR="$DEDE_ROOT/data/log"
if [ -d "$LOG_DIR" ]; then
COUNT=$(find $LOG_DIR -type f -mtime +$KEEP_DAYS | wc -l)
find $LOG_DIR -type f -mtime +$KEEP_DAYS -delete
log "清理过期日志:删除 $COUNT 个文件"
fi
# 5. 清理uploads临时目录(超过7天的)
USERUP_DIR="$DEDE_ROOT/uploads/userup"
if [ -d "$USERUP_DIR" ]; then
COUNT=$(find $USERUP_DIR -type f -mtime +7 | wc -l)
find $USERUP_DIR -type f -mtime +7 -delete
log "清理会员上传临时文件:删除 $COUNT 个文件"
fi
# 6. 清理首页静态缓存
INDEX_CACHE="$DEDE_ROOT/data/cache/index_*.html"
COUNT=$(ls -1 $INDEX_CACHE 2>/dev/null | wc -l)
rm -f $INDEX_CACHE
log "清理首页缓存:删除 $COUNT 个文件"
log "=====清理完成====="
log ""
四、脚本部署步骤
1. 上传脚本
# 保存为
vim /usr/local/bin/dedecms_cache_clean.sh
# 赋予执行权限
chmod +x /usr/local/bin/dedecms_cache_clean.sh
2. 修改配置
编辑脚本,把 DEDE_ROOT 改成实际织梦路径。如果用宝塔面板,路径通常是 /www/wwwroot/域名。
3. 手动测试
# 先干跑一次看日志
/usr/local/bin/dedecms_cache_clean.sh
# 查看日志
cat /var/log/dedecms_clean.log
确认清理数量合理,没有误删。
4. 配置定时任务
# 编辑 crontab
crontab -e
# 每天凌晨3点执行
0 3 * * * /usr/local/bin/dedecms_cache_clean.sh >/dev/null 2>&1
# 或每6小时执行一次(高流量站点)
0 */6 * * * /usr/local/bin/dedecms_cache_clean.sh >/dev/null 2>&1
五、宝塔面板配置方式
宝塔用户可以用“计划任务”功能,不用写 crontab:
- 登录宝塔面板 → 计划任务 → 添加任务
- 任务类型:Shell 脚本
- 任务名称:织梦缓存清理
- 执行周期:每天 3:00
- 脚本内容:粘贴上面的脚本
宝塔会自动记录每次执行结果,方便回溯。
六、进阶:数据库优化脚本
除了文件清理,数据库也要定期优化。织梦的 dede_archives 等表频繁增删后会有碎片,定期 OPTIMIZE TABLE 回收空间:
#!/bin/bash
# dedecms_db_optimize.sh
DB_USER="root"
DB_PASS="yourpassword"
DB_NAME="dedecms"
mysql -u$DB_USER -p$DB_PASS $DB_NAME <<EOF
OPTIMIZE TABLE dede_archives;
OPTIMIZE TABLE dede_addonarticle;
OPTIMIZE TABLE dede_arctype;
OPTIMIZE TABLE dede_flink;
OPTIMIZE TABLE dede_member;
EOF
echo "[$(date)] 数据库优化完成" >> /var/log/dedecms_clean.log
七、监控磁盘占用
在脚本里加一段磁盘监控,超过阈值告警:
# 磁盘占用超 80% 告警
DISK_USE=$(df -P $DEDE_ROOT | awk 'NR==2{print $5}' | tr -d '%')
if [ $DISK_USE -gt 80 ]; then
# 发送告警(需配置邮件或钉钉机器人)
echo "警告:磁盘占用 ${DISK_USE}%,超过阈值" | mail -s "磁盘告警" admin@xxx.com
log "警告:磁盘占用 ${DISK_USE}%"
fi
也可配合宝塔的“监控宝”或阿里云监控做更完善的告警。
八、安全注意事项
- 脚本里不要硬编码数据库密码,用
.my.cnf或环境变量 - 脚本文件权限设为 700,仅 root 可读可执行
find ... -delete前先用-print测试,确认匹配的文件无误- 不要清理
/data/config.*.inc.php等配置文件 - 清理前最好打包
/data/目录做备份 - Session 清理要保留正在登录的用户,用
-mtime +1只删超过 24 小时的
九、清理效果统计
脚本运行一段时间后,统计清理量:
# 查看最近30天清理日志
grep "删除" /var/log/dedecms_clean.log | tail -100
# 统计总清理文件数
grep "删除" /var/log/dedecms_clean.log | awk -F'删除' '{print $2}' | awk '{sum+=$1} END{print "总清理:"sum"个文件"}'
如果发现某次清理量异常大,说明站点可能有异常(如被刷 session、缓存不生效等),需排查。
十、常见问题
1. 清理后站点变慢
标签缓存被清空后,首次访问需要重新生成缓存,会有短暂变慢。属于正常现象,几次访问后恢复正常。建议在凌晨低峰期执行。
2. Session 清理后用户被踢下线
只清理超过 24 小时的 session 不会影响正常用户。如果误删了活跃 session,检查 -mtime 参数是否设得太短。
3. 脚本执行报权限错误
用 root 执行,或确保运行用户对 /data/ 目录有读写权限。宝塔环境用 www 用户执行。
缓存清理是织梦站点长期稳定运行的基础运维。建议把脚本纳入服务器初始化清单,新站点上线就部署好。配合日志监控和磁盘告警,能让织梦站点在无人值守的情况下持续稳定运行,省去大量手动维护的时间。