我有以下脚本:
// 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附带的一般脚本。那些脚本也没有结果。
答案 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