我的 CakePHP 控制台脚本在 cron 下执行时出现问题。它抱怨缺少 Mysql 连接等。
经过一番调查,我发现 cron 运行的 php 使用的 php.ini 文件与我在终端中运行时不同。
更奇怪的是,在终端中,php 没有使用 cli 配置:
PHP 在终端中运行:
配置文件(php.ini)路径:/usr/local/lib 加载的配置文件:/usr/local/lib/php.ini 扫描以下位置的其他 .ini 文件:(无) 解析的其他 .ini 文件: (无)
由 cron 运行的 PHP:
配置文件(php.ini)路径:/etc/php5/cli 加载的配置文件:/etc/php5/cli/php.ini 扫描 /etc/php5/cli/conf.d 中的其他 .ini 文件 解析的其他 .ini 文件:/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
我不知道为什么它不使用相同的配置文件。我没有注意到ENV
终端中的变量或作为 cron 运行时有什么特殊之处。
答案1
我不确定这是否是标准行为,但你随时可以添加
-c /usr/local/lib/php.ini
使用自定义配置的命令。
答案2
由于设置不同,您可能没有php
在终端和 cron 中使用相同的二进制文件PATH
。
which php
在终端中输入php
cron 脚本中的二进制文件的完整路径。
答案3
我同意 Oliver 的观点 - 您必须在 cron 中输入 php 的完整路径。您也可以在 cron 文件中包括 PATH 参数,但最好使用 php 的绝对路径。