今天写了一个定时任务的脚本。想用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是唯一的,不知道会不会出这样的问题。