必须用绝对路径调用宝塔对应php版本的cli解释器,如/www/server/php/80/bin/php,而非系统php命令,并在shell脚本任务中指定完整路径、处理工作目录与权限。
宝塔面板里添加 PHP 脚本定时任务的正确姿势
直接在宝塔「计划任务」里填 PHP 脚本路径,大概率执行失败——因为没指定 PHP 解释器路径,也没处理工作目录和环境变量。必须用绝对路径调用对应版本的 php 命令,否则脚本找不到扩展、连不上数据库、读不到相对路径文件都是常态。
- 进宝塔后台 → 「计划任务」→ 「添加计划任务」
- 任务类型选「Shell 脚本」(别选「PHP 脚本」,那个只支持简单函数调用,不走 CLI 环境)
- 脚本内容写成:
/www/server/php/80/bin/php /www/wwwroot/example.com/cli.php
(把
80换成你实际启用的 PHP 版本号,cli.php改为你的脚本绝对路径) - 执行周期按需设置,建议首次调试先设「每分钟」,确认能跑通再调回正常频率
为什么用 /www/server/php/xx/bin/php 而不是系统 php
宝塔多 PHP 版本共存时,系统 php 命令通常指向默认版本(可能是 7.4 或未启用的版本),而你的网站用的是 8.0 或 8.2,扩展、配置、SSL 证书路径全都不一样。直接调用 php 极易报错:Class 'PDO' not found、Undefined function curl_init()、file_get_contents(): SSL operation failed。
-
/www/server/php/xx/bin/php是宝塔为每个 PHP 版本单独编译的 CLI 可执行文件,加载的是该版本完整的php.ini - 可通过宝塔「软件商店」→「PHP 管理」→「设置」→「配置文件」确认对应版本的
php.ini路径,再检查扩展是否已启用 - 如果脚本依赖 Composer 自动加载,确保
vendor/autoload.php路径正确,且composer install --no-dev已在目标目录执行过
调试 PHP 定时任务失败的三步定位法
任务显示「执行成功」但脚本没反应?或日志里一堆 Warning 却没输出?别猜,按顺序查: