Cakephp脚本可以从命令行正常运行,但不能从cron运行

时间:2019-05-30 19:47:21

标签: php cakephp cron command-line-interface cakephp-2.0

在此之前,我先说我已经在网上进行了广泛的研究,而提供的解决方案对我没有用。例如,我尝试了所有发布在here上的内容(包括那里的链接解决方案)。这可能是由于我在下面解释的我的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 中,我也更新了以下行以反映这一点(在执行此操作之前,我发现了另一个错误,因为核心控制台文件没有找到):

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

我已经查看了所有正在加载的库的路径,按照链接的解决方案和CakePHP自己的documentation中的建议更新了php.ini变量和系统PATH,但仍然无法使它正常工作。

我希望有人能指出我正确的方向。 再次,如果我从命令行运行相同的脚本,它可以正常工作,这是我从cron调用它时遇到的问题 shell脚本位于应用程序的Console / Command文件夹中。

所有这些都在使用CakePHP 2.10.18的LAMP服务器中。

1 个答案:

答案 0 :(得分:0)

您可以先在controller中调用shell函数,然后在cron中调用controller函数。