当由cron运行时,PHP cli使用不同的php.ini文件

我的CakePHP控制台脚本在cron下执行有问题。 它抱怨缺lessMysql连接等。

经过一番调查,我发现由cron运行的php使用一个不同的php.ini文件相比,当我在terminal中运行它。

更奇怪的是在terminal中,php不使用cli config:

PHP在terminal运行:

configuration文件(php.ini)path:/ usr / local / lib
加载的configuration文件:/usr/local/lib/php.ini
扫描其他.ini文件:(无)
附加的.ini文件parsing:(无)

由cron运行的PHP:

configuration文件(php.ini)path:/ etc / php5 / cli
加载的configuration文件:/etc/php5/cli/php.ini
在/etc/php5/cli/conf.d中扫描其他.ini文件
附加的.ini文件parsing:/etc/php5/cli/conf.d/memcache.ini,
 /etc/php5/cli/conf.d/mysql.ini,
 /etc/php5/cli/conf.d/mysqli.ini,
 /etc/php5/cli/conf.d/pdo.ini,
 /etc/php5/cli/conf.d/pdo_mysql.ini,
 /etc/php5/cli/conf.d/suhosin.ini,
 /etc/php5/cli/conf.d/xcache.ini

我不知道为什么它不使用相同的configuration文件。 我没有注意到在terminal的ENVvariables中有什么特别的地方,或者以cron的方式运行。

我不确定这是否是标准行为,但您可以随时添加

-c /usr/local/lib/php.ini到使用自定义configuration的命令。

你可能没有在terminal和cron中使用相同的php二进制文件,因为有不同的PATH设置。

inputterminal中的which php ,并将你的cron脚本中的php二进制文件的完整path。

我同意奥利弗 – 你必须把完整的path在PHP中的cron。 你也可以在cron文件中包含一个PATH参数,但是可能最好到php的绝对path。