Mein CakePHP-Konsolenskript hat Probleme bei der Ausführung unter Cron. Es beschwert sich über fehlende Mysql-Verbindungen und dergleichen.
Nach einigen Nachforschungen habe ich festgestellt, dass PHP, wenn es per Cron ausgeführt wird, eine andere php.ini-Datei verwendet, als wenn ich es im Terminal ausführe.
Noch merkwürdiger ist, dass PHP im Terminal die CLI-Konfiguration nicht verwendet:
PHP im Terminal ausführen:
Pfad der Konfigurationsdatei (php.ini): /usr/local/lib Geladene Konfigurationsdatei: /usr/local/lib/php.ini Nach weiteren INI-Dateien suchen in: (keine) Zusätzlich analysierte INI-Dateien: (keine)
PHP per Cron ausgeführt:
Pfad der Konfigurationsdatei (php.ini): /etc/php5/cli Geladene Konfigurationsdatei: /etc/php5/cli/php.ini Suchen Sie nach zusätzlichen INI-Dateien in: /etc/php5/cli/conf.d Zusätzliche analysierte INI-Dateien: /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
Ich habe keine Ahnung, warum nicht dieselben Konfigurationsdateien verwendet werden. Ich kann an den ENV
Variablen im Terminal oder beim Ausführen als Cron nichts Besonderes erkennen.
Antwort1
Ich bin nicht sicher, ob das Standardverhalten ist oder nicht, aber Sie können immer hinzufügen
-c /usr/local/lib/php.ini
zum Befehl, eine benutzerdefinierte Konfiguration zu verwenden.
Antwort2
php
Möglicherweise verwenden Sie aufgrund unterschiedlicher Einstellungen im Terminal und in Cron nicht dieselbe Binärdatei PATH
.
Geben Sie which php
das Terminal ein und geben Sie den vollständigen Pfad zur php
Binärdatei in Ihr Cron-Skript ein.
Antwort3
Ich stimme Oliver zu – Sie müssen den vollständigen Pfad zu PHP in Cron eingeben. Sie können auch einen PATH-Parameter in die Cron-Datei aufnehmen, aber am besten ist wahrscheinlich ein absoluter Pfad zu PHP.