ThinkPHP 5.1 定时清理缓存需用 php think clear 命令加参数精准控制范围,避免误删 view/config 缓存;应封装为自定义命令行指令、加锁防并发、分步清理并记录日志。

ThinkPHP 5.1 的定时任务做缓存清理,不能只靠“删目录”或“跑一遍 clear”,得兼顾安全性、精准性和稳定性。核心是:用对命令、避开敏感缓存、加锁防重复、日志可追溯。
用 php think clear 命令要加参数,别默认清
默认 php think clear 只清 runtime/cache/、runtime/log/ 和 runtime/temp/,但不会动 runtime/view/(模板缓存)和 runtime/config/(配置缓存)。误删后者会导致 404 或配置丢失。
- 清模板缓存必须加 -t:`php think clear -t`
- 只想清文件类缓存、跳过日志和临时文件,用 -f:`php think clear -f`
- TP5.1 不支持
--except这类参数,所以没法跳过某类缓存,只能靠参数组合控制范围
封装成命令行指令,再由 Crontab 调用
把清理逻辑写进 app/command/CleanCache.php,比直接在控制器里写方法更规范、更易调度。
- 类名和文件名一致,命名空间为
app\command -
configure()中设命令名,例如:$this->setName('cron:clear-cache') -
execute()里调用\think\Cache::clear(),并输出提示信息,方便日志追踪 - Crontab 条目示例:
0 */3 * * * cd /var/www/myproject && /usr/bin/php think cron:clear-cache >> /var/log/clear-cache.log 2>&1
加锁 + 分步清理,防并发和超时
多个服务器实例或容器重启后,可能同时触发同一个定时任务,导致重复清理或删错数据。
立即学习“PHP免费学习笔记(深入)”;
- 在命令执行前检查锁文件,比如
runtime/lock/clean_cache.lock,存在则退出 - 清理完成后自动删除锁文件,或设 10 分钟自动过期(用文件修改时间判断)
- 避免一次性清全量:先清
cache/,再清temp/,最后清log/,每步加sleep(1)防 IO 冲突 - 日志路径务必用绝对路径,否则 CLI 下容易写到错误位置
别用 rm -rf,优先走框架原生命令
宝塔或手动写 shell 脚本时,直接 rm -rf runtime/cache 极不安全——万一路径写错、软链接没识别,可能清掉 session 或路由缓存。
- 推荐做法:在宝塔「计划任务」中新建 Shell 脚本,内容为:
cd /var/www/myproject && /usr/bin/php think cron:clear-cache - 若必须用 find 清理旧文件(如 log),限定类型和时间:
find /var/www/myproject/runtime/log -name "*.log" -mtime +7 -delete - 执行前先测试:
find ... -print看列出的是否全是目标文件


















