Éri*_*icP 21 php testing cron magento
首先,我需要了解Magento cron的工作原理.
我知道cron如何在linux上运行,使用crontab -e.
我知道我需要设置Magento的cron.php来定期运行
但是当我在magento配置文件中定义cron时,它们如何匹配应该运行它们?
因为如果设置我的cron.php每15分钟运行一次(0,15,30,45 * * * *),我就有一个Magento cron <schedule><cron_expr>10 * * * *</cron_expr></schedule>.
它将如何匹配/工作?
顺便问一下,我怎么能测试我的cron是否可以在没有等待很长时间的情况下工作?
Nic*_*ick 54
Magento的cron入口点是cron.phpMagento根目录中的脚本.您需要在此脚本中设置操作系统crontab条目,您似乎已经完成了此操作.
cron是如何工作的
每次cron.php脚本被击中时都会发生三件事:
config.xml文件以查找<config><crontab>...</crontab></config> jobs条目,阅读其cron_expr元素以了解它们应运行的频率.Magento然后使用应该在将来执行的作业填充cron调度表,以及应该运行它们的时间戳.Magento执行此操作的未来程度可在管理员中进行配置.重复运行?
你提出了一个有趣的观点.如果你在Magento安排了一个10分钟的计时,会发生什么,但cron.php只保证每15分钟一次.在某些情况下,Magento似乎会两次运行你的Magento工作:
我只阅读了代码,而这似乎就是这样.当然,最好的方法是运行它并找出答案.如果你想避免这个问题,在大多数情况下,然后将cron.php执行频率提高到每5分钟,这就是我们所做的.
测试你的代码
如果你想测试你的cron是否实际工作而没有等待年龄,设置cron_expr每分钟执行一次,或清除你的cron计划表然后点击cron.php两次(一次生成计划,再次运行作业).
如果您只是想测试您的模型是否正常工作,您可以设置一个测试脚本(在https://www.nicksays.co.uk/testing-magento-modules中概述),然后运行它.
您的问题提示了一篇博文:https://www.nicksays.co.uk/dissecting-the-magento-cron-system :)
将这些添加到cron.php的底部将使其在执行时使用datetime写出cron.php.log
try {
Mage::getConfig()->init()->loadEventObservers('crontab');
Mage::app()->addEventArea('crontab');
Mage::dispatchEvent('default');
$log = fopen(__FILE__.'.log', 'a');
fwrite($log, date("Y-m-d H:i:s").PHP_EOL);
fclose($log);
} catch (Exception $e) {
Mage::printException($e);
}
Run Code Online (Sandbox Code Playgroud)
在问题的后半部分......如何判断它是否在运行.
这是我做的事情.我在cron.php文件的末尾添加了以下代码.每次调用cron.php文件时,这都会更新一个名为"cronlog.txt"的简单日志.
所以,如果我对cron运行有疑问,我可以浏览一下该文件并查看cron.php文件运行的最后日期和时间.
try {
$myFile = "cronlog.txt";
$fh = fopen($myFile, 'w');
$stringData = date('l jS \of F Y h:i:s A');
fwrite($fh, $stringData);
fclose($fh);
} catch (Exception $e) {
Mage::printException($e);
}
Run Code Online (Sandbox Code Playgroud)