给定:在 Config.xml 中具有正确配置的 cronjob(假设每 5 分钟一次)的扩展。此外,系统 cron 设置为运行 Magento 的 cron.sh。安装扩展后,cronjob 必须运行几次,当它没有更多数据要处理时,它就会过时。
问题:处理完所有数据后不再需要该作业。然而,它在 Config.xml 中的设置导致它永远每 5 分钟运行一次,只是为了检查是否没有更多数据并终止。
问题:当发现没有更多数据时,是否有任何正确的方法(可能使用 cron_schedule 表...)以编程方式从其自己的 PHP 中“关闭”cronjob?或者有其他办法吗? 使用 cron 是因为扩展安装过程不应被中断。也许可以用 cron 之外的其他方式安排一些 PHP 代码(但在 Magento 中)?考虑过线程,但由于不能保证会内置此功能,因此这似乎不是一个选择......
提前致谢!
最佳答案
所以,我找到了两种可能的解决方案:1)似乎可以通过 core_config_data 表创建/删除 crontab,而无需 config.xml; 2)处理完所有数据后从config.xml中删除crontab节点+清理缓存+删除所有挂起的任务。我已经成功实现了第二种方法,并且它有效(我知道第一种方法要好得多,但我只是没有时间去挖掘它)。
第二个看起来像:
if ($more_data) {
// processing...
} else { // Dismissing the cron
$config_xml_path = Mage::getModuleDir('etc', 'the_extension') . '/config.xml';
$config_xml = simplexml_load_file($config_xml_path) or die("Error: Cannot create object");
if (isset($config_xml) && isset($config_xml->crontab)) {
unset($config_xml->crontab);
$config_xml->asXML($config_xml_path);
}
// Cleaning
Mage::app()->cleanCache();
$schedule = Mage::getModel('cron/schedule');
$sch_col = $schedule->getCollection()
->addFilter('job_code', 'the_extension_cronFunc')
->addFilter('status', 'pending');
foreach ($sch_col as $s) {
$s->delete();
}
}
关于mysql - 有什么方法可以消除 Magento 中的 cronjob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27900958/