PHP cli は cron で実行されるときに異なる php.ini ファイルを使用します

PHP cli は cron で実行されるときに異なる php.ini ファイルを使用します

私の 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

ターミナルに入力し、 cron スクリプトにバイナリwhich phpへのフルパスを入力します。php

答え3

Oliver さんの意見に同意します。cron に php へのフル パスを入力する必要があります。cron ファイルに PATH パラメータを含めることもできますが、php への絶対パスを入力するのがおそらく最善です。

関連情報