У моего консольного скрипта CakePHP возникли проблемы с выполнением под cron. Он жалуется на отсутствие соединений Mysql и т.п.
После небольшого расследования я обнаружил, что PHP, запускаемый через cron, использует другой файл php.ini по сравнению с тем, когда я запускаю его в терминале.
Еще более странно то, что в терминале php не использует конфигурацию cli:
Запустите PHP в терминале:
Путь к файлу конфигурации (php.ini): /usr/local/lib Загруженный файл конфигурации: /usr/local/lib/php.ini Сканировать на наличие дополнительных файлов .ini в: (нет) Дополнительные проанализированные файлы .ini: (нет)
PHP, запущенный cron:
Путь к файлу конфигурации (php.ini): /etc/php5/cli Загруженный файл конфигурации: /etc/php5/cli/php.ini Сканирование дополнительных файлов .ini в: /etc/php5/cli/conf.d Дополнительные проанализированные файлы .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
Я согласен с Оливером - нужно указать полный путь к php в cron. Вы также можете включить параметр PATH в файл cron, но, вероятно, лучше указать абсолютный путь к php.