前言

有个PHP网站跑的好好的,闲来无事把宝塔面板里的软件升级了一把,系统里也update了一回。然后,发现网站功能不正常了,定时任务执行完成没有效果,线上生产环境,思来想去不知道哪里出错了,慌得一逼,还好最后解决得有惊无险!

现象

用系统定时任务设置了个PHP任务,但任务结果迟迟不对,但 tail -f /var/log/cron 可见系统任务正常执行。

排查

因为是线上环境,不敢冒然动手,只能一点点试探。因为升级过环境,所以也不可能把所有软件都想一遍,既然是PHP任务,那第一个想到的就是PHP程序出问题了。
检查下来PHP程序功能也没什么问题,除了定时任务执行结果不对,索性手动运行了一把:

1
2
# 先切到网站目录,然后执行
php artisan schedule:run

结果显示:

1
[Composer\Downloader\TransportException] Peer fingerprint did not match

这个错误Google一把,人家说是版本不匹配,再去看看自己安装的PHP版本,7.2.31 并没有错,但系统内用 php -v 却是 5.6.4 ,版本不符,这个版本并没有安装过,也不知道怎么来的,不知道是删库塔更新错误还是 yum update 的时候哪里带来的,总归知道原因了。

解决

宝塔面板处理

在宝塔面板上可以直接切换PHP命令行版本的功能:宝塔面板》网站》PHP命令行版本 ,点击选择你要的版本即可。

系统内处理

如果没有删库塔上这个功能入口,也可以登录系统自行更改:

1
2
#找到PHP程序位置
whereis php

会返回PHP路径,一般都在 /usr/bin/php ,然后把这个入口链接到你安装的PHP实际路径即可,如删库塔安装的PHP位置为:/www/server/php/72/bin/php ,那么,执行以下命令:

1
ln -sf /www/server/php/72/bin/php /usr/bin/php

软链接创建完成后,再次 php -v 检查版本应该就正确了,此时PHP任务执行功能正常,故障得以消除。