定时任务执行PHP文件时提示Redis not found

今天写了一个定时任务的脚本。想用linux的crontab作定时执行。在脚本中需要使用到redis。

执行redis的部分代码在web访问时是完全OK的,在命令行通知手动输入php执行也是正常的,但是添加到定时任务后就会报错。

手动执行脚本,运行正常

php ./console.php

定时任务执行脚本,则报错

* * * * * php ./console.php

报错内容:

Fatal error: Uncaught Error: Class 'Redis' not found in /Users/wenqidong/path/to/console.php

在命令行中,使用php -m查看加载的模块,redis是有被加载的。

想到电脑上装了两个版本的php可能会有影响,于是uninstall了另一个版本的php。结果一样,手动执行的时候没问题,加到定时任务还是报redis class not found。

有人说cli模式加载的配置文件不同。我查看了一下我的php.ini的位置

wenqidongdeMBP:seagm-pin wenqidong$ php --ini
Configuration File (php.ini) Path: /usr/local/etc/php/7.1
Loaded Configuration File:         /usr/local/etc/php/7.1/php.ini
Scan for additional .ini files in: /usr/local/etc/php/7.1/conf.d
Additional .ini files parsed:      /usr/local/etc/php/7.1/conf.d/ext-opcache.ini

即然有可能是使用配置文件不同,我试一下强制指定配置文件试一下:

* * * * * php -c /usr/local/etc/php/7.1/php.ini /path/to/console.php

最终结果果然奏效了!如果正式环境的PHP是唯一的,不知道会不会出这样的问题。