Сценарий Cakephp работает нормально из командной строки, но не из cron - PullRequest
0 голосов
/ 30 мая 2019

Прежде всего скажу, что я провел обширные исследования в Интернете, и предлагаемые решения не сработали для меня . Например, я попробовал все, что опубликовано здесь (включая связанные решения оттуда). Вероятно, это связано с уникальностью моей установки CakePHP , которую я объясняю ниже.

Моя проблема в том, что у меня есть сценарий Cakephp Shell, который при запуске из командной строки работает нормально, например:

Console/cake enrolmentlogs update_daily_enrolment_logs

Однако, когда я вызываю этот скрипт из cron, я получаю сообщение об ошибке. Звоните:

cd /path/to/app/ && Console/cake enrolmentlogs update_daily_enrolment_logs >> /path/to/app/webroot/cron_shell_logs.txt 2>&1

Ошибка, которую я получаю:

PHP Notice:  Undefined variable: argv in /path/to/app/Console/cake.php on line 48
Error: This file has been loaded incorrectly and cannot continue.
Please make sure that /lib/Cake/Console is in your system path,
and check the cookbook for the correct usage of this command.
(https://book.cakephp.org/)
#0 /path/to/libs/cakephp-2.10.18/Cake/Console/ShellDispatcher.php(54): ShellDispatcher->_initEnvironment()
#1 /path/to/libs/cakephp-2.10.18/Cake/Console/ShellDispatcher.php(65): ShellDispatcher->__construct(NULL)
#2 /path/to/app/Console/cake.php(48): ShellDispatcher::run(NULL)
#3 {main}

Одна вещь, которую я должен упомянуть, состоит в том, что моя установка CakePHP состоит из нескольких приложений, которые загружают одну и ту же библиотеку ядра , которая находится в другой папке, чем сами приложения. Приложения работают отлично, это всего лишь скрипт cron, который я могу запустить. В cake.php внутри папки Console приложения я обновил следующую строку, чтобы отразить это тоже (до этого я получал другую ошибку, которую я выяснил, потому что не были найдены основные файлы консоли. ):

//$install = $root . DS . 'lib';
$install = '/path/to/libs/cakephp-2.10.18';

Я просмотрел все пути к загружаемым библиотекам, обновил переменные php.ini и системный PATH, как предложено в связанных решениях, и собственную документацию CakePHP , но я до сих пор не могу получить это работа.

Я надеялся, что кто-нибудь сможет направить меня в правильном направлении. Опять же, если я запускаю тот же сценарий из командной строки, он работает нормально, именно когда я вызываю его из cron, у меня возникает проблема . Сценарий оболочки находится в папке Console / Command приложения.

Все это на сервере LAMP с использованием CakePHP 2.10.18.

1 Ответ

0 голосов
/ 01 июня 2019

Вы можете сначала вызвать функцию оболочки в контроллере, а затем вызвать функцию контроллера в cron.

...