【问题标题】:Cakephp script running fine from command line but not from cronCakephp 脚本从命令行运行良好,但不能从 cron
【发布时间】:2019-10-16 11:49:47
【问题描述】:

首先我要说的是,我已经在网上进行了广泛的研究,提供的解决方案对我没有用。例如,我已经尝试了 here 发布的所有内容(包括那里的链接解决方案)。这可能是由于我在下面解释的 我的 CakePHP 安装的独特性

我的问题是我有一个 Cakephp Shell 脚本,当我从命令行运行时它运行良好,例如:

Console/cake enrolmentlogs update_daily_enrolment_logs

但是,当我从 cron 调用该脚本时,出现错误。 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 服务器中。

【问题讨论】:

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


    【解决方案1】:

    你可以先在控制器中调用shell函数,然后在cron中调用控制器函数。

    【讨论】:

    • 是的,但使用 shell 的全部意义在于避免这样做......我可以将我在 shell 脚本中的逻辑放在控制器中并完全忘记 shell,但这不是我的我正在努力完成......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多