JApplicationCli Cronjob

时间:2016-12-14 19:36:21

标签: joomla joomla3.0

我有以下脚本:

// Initialize Joomla framework
const _JEXEC = 1;

// Load system defines
if (file_exists(dirname(__DIR__) . '/defines.php'))
{
    require_once dirname(__DIR__) . '/defines.php';
}

if (!defined('_JDEFINES'))
{
    define('JPATH_BASE', dirname(__DIR__));
    require_once JPATH_BASE . '/includes/defines.php';
}

// Get the framework.
require_once JPATH_LIBRARIES . '/import.legacy.php';

// Bootstrap the CMS libraries.
require_once JPATH_LIBRARIES . '/cms.php';

/**
 * Cron job to trash expired cache data.
 *
 * @since  2.5
 */
class DoCron extends JApplicationCli
{

    public function doExecute()
    {

        echo 'ok3';
        $this->out('Fetching updates...');

    }

}

JApplicationCli::getInstance('DoCron')->execute();

我已在CPanel中添加了Cronjob并通过电子邮件获取了结果。

现在我希望收到一封带有“ok3”的电子邮件。或者'获取更新......'但都不是。我收到一封电子邮件,但它是对php执行的引用。

当我添加一个' echo ok'之前标记:

JApplicationCli::getInstance('DoCron')->execute();

我明白了'#ok;'因此在电子邮件中。

对这里出了什么问题的想法?该脚本基于joomla 3.6.5附带的一般脚本。那些脚本也没有结果。

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。事实证明,大多数主机的默认php二进制文件是PHP CGI。在PHP CGI下运行会导致没有stdout,stderr和stdin,这就是为什么你没有看到正确的输出。

相反,请检查您的CPanel文档并查找PHP的CLI版本。它很可能被称为php-cli。例如,我必须为Joomla CLI应用程序运行一个cron作业,并发现以下工作:

/usr/bin/php-cli /path/to/joomla/cli/my-cli -a b -c d --verbose