
最近处理一个 PHP 定时任务时遇到过这种情况:在宝塔终端里手动执行脚本完全正常,放进计划任务后却一直失败,有时候日志甚至什么都没有。代码没改,PHP 版本也一样,看起来特别像计划任务本身有问题。
后来顺着执行环境排查,才发现脚本里用了相对路径。手动进入项目目录运行时,./config.php、./logs/ 这些路径都能正常找到,但计划任务启动时的工作目录并不一定是网站目录,所以配置文件读取失败,日志目录也写不到正确位置。
处理时把脚本里的文件路径统一改成基于 __DIR__ 的绝对路径,同时在计划任务里明确指定 PHP 可执行文件和脚本完整路径。涉及环境变量、数据库配置、日志文件的地方也单独检查,不再默认计划任务和网页访问时的运行环境完全一样。
另外还给脚本增加了开始时间、结束时间和异常日志。这样以后任务没有执行成功,不需要先猜到底有没有启动,直接看日志就能知道卡在哪一步。
现在遇到"手动正常、定时失败"的 PHP 脚本,我一般先检查执行目录、PHP 路径、文件权限和环境变量。很多时候代码本身没有问题,只是换了一种执行方式以后,运行环境已经不一样了。
#PHP开发 #定时任务 #宝塔面板 #服务器运维