我的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。