在宝塔面板中为ThinkPHP6配置定时任务需三步:先确认php think virtual指令可正常执行;再编写含cd目录和绝对PHP路径的Shell脚本;最后在宝塔计划任务中添加并测试。

在宝塔面板中为 ThinkPHP6 项目配置定时任务,核心是让系统定期执行你的自定义指令(如 php think virtual),而不是依赖 PHP 的 Web 请求或手动触发。整个过程分三步:确保指令可运行、写对 Shell 脚本、在宝塔中正确添加计划任务。
确认 ThinkPHP6 自定义指令能正常执行
先 SSH 登录服务器,进入你的项目根目录(例如 /www/wwwroot/rapi.rrxun.cn),手动运行一次指令,验证是否成功:
- 执行
/www/server/php/72/bin/php think virtual(注意把72换成你实际安装的 PHP 版本号,如80、81) - 如果报错“Command not found”,检查
think文件是否可执行:chmod +x think - 如果提示找不到类或路径错误,确认当前目录确实是 TP6 项目根目录(含
think文件、app、vendor等)
编写正确的 Shell 脚本内容
宝塔不支持直接运行 PHP 指令,必须用 Shell 脚本封装。脚本关键点是:切换到项目目录 + 指定完整 PHP 路径 + 执行指令。示例脚本如下:
cd /www/wwwroot/rapi.rrxun.cn /www/server/php/72/bin/php think virtual
- 第一行
cd确保后续命令在正确路径下运行(否则 TP6 无法加载配置和类) - 第二行使用绝对路径调用 PHP,避免环境变量导致的命令找不到问题
- 不要加
#!/bin/bash头(宝塔计划任务默认以 bash 执行,加了反而可能出兼容问题)
在宝塔中添加计划任务
登录宝塔 → 左侧菜单「计划任务」→ 「添加计划任务」:
立即学习“PHP免费学习笔记(深入)”;
- 任务名称:比如“每30分钟释放虚拟号”
- 任务类型:选「Shell 脚本」
-
执行周期:选「N分钟」→ 填写「30」(对应 cron 表达式
*/30 * * * *) - 脚本内容:粘贴上面写的两行脚本(注意替换为你自己的 PHP 版本和项目路径)
保存后,可点击右侧「执行」手动测试一次,再查看「日志」确认输出是否符合预期(如看到“虚拟号已释放”或数据库变更记录)。
补充说明:避免常见坑
有些问题看似是定时任务失败,其实是环境或权限导致的:
- 如果日志里出现
Permission denied,检查think文件和项目 runtime 目录是否有写权限:chmod -R 755 think、chmod -R 777 runtime - 不要用 URL 访问方式(如 curl http://xxx.com/schedule)来触发 TP6 指令,Web 方式受路由、中间件、超时等限制,稳定性远不如命令行直跑
- 若项目用了多环境配置(如
.env),确保该文件在项目根目录且权限正常,Shell 执行时会自动读取



















