私の 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 への絶対パスを入力するのがおそらく最善です。