Мой скрипт консоли CakePHP не запускается под cron. Он жалуется на отсутствие соединений Mysql и тому подобное.
После небольшого исследования я обнаружил, что php, запускаемый cron, использует другой файл php.ini по сравнению с тем, когда я запускаю его в терминале.
Что еще более странно, так это то, что в терминале php не использует конфигурацию cli:
PHP запускается в терминале:
Configuration File (php.ini) Path: /usr/local/lib Loaded Configuration File: /usr/local/lib/php.ini Scan for additional .ini files in: (none) Additional .ini files parsed: (none)
PHP под управлением cron:
Configuration File (php.ini) Path: /etc/php5/cli Loaded Configuration File: /etc/php5/cli/php.ini Scan for additional .ini files in: /etc/php5/cli/conf.d Additional .ini files parsed: /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.
Возможно, вы не используете то же самое php
двоичный файл в терминале и в cron из-за разного PATH
настройка.
Войти which php
в терминале и введите полный путь к php
двоичный файл в вашем cron-скрипте.
Я не уверен, стандартное ли это поведение или нет, но вы всегда можете добавить
-c /usr/local/lib/php.ini
к команде использовать настраиваемую конфигурацию.
Я согласен с Оливером - вы должны поместить полный путь к php в cron. Вы также можете включить параметр PATH в файл cron, но, вероятно, лучше всего указать абсолютный путь к php.