在 Magento 中取消 cronjob 的任何方法
Any way to dismiss a cronjob in Magento
给定:在 Config.xml 中具有正确配置的 cronjob(假设每 5 分钟一次)的扩展程序。此外,系统 cron 设置为 运行 Magento 的 cron.sh。安装扩展后,cronjob 必须 运行 几次,当它没有更多数据要处理时,它就会过时。
问题:作业在处理完所有数据后不再需要。但是,它在 Config.xml 中的设置导致它永远每 5 分钟 运行,只是为了检查没有更多的数据然后死掉。
问题:是否有任何正确的方法(可能使用 cron_schedule table...)从它自己的 PHP 以编程方式 'dismiss' cronjob 当它看到没有更多的数据?还是有其他办法?
使用 cron 是因为不应中断扩展安装过程。也许可以用 cron 以外的其他方式安排一些 PHP 代码(但在 Magento 中)?考虑过线程,但由于无法保证内置此功能,因此这似乎不是一个选项....
提前致谢!
所以,我找到了 2 种可能的解决方案:1) 似乎可以通过 core_config_data table create/remove crontabs 而无需 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();
}
}
给定:在 Config.xml 中具有正确配置的 cronjob(假设每 5 分钟一次)的扩展程序。此外,系统 cron 设置为 运行 Magento 的 cron.sh。安装扩展后,cronjob 必须 运行 几次,当它没有更多数据要处理时,它就会过时。
问题:作业在处理完所有数据后不再需要。但是,它在 Config.xml 中的设置导致它永远每 5 分钟 运行,只是为了检查没有更多的数据然后死掉。
问题:是否有任何正确的方法(可能使用 cron_schedule table...)从它自己的 PHP 以编程方式 'dismiss' cronjob 当它看到没有更多的数据?还是有其他办法? 使用 cron 是因为不应中断扩展安装过程。也许可以用 cron 以外的其他方式安排一些 PHP 代码(但在 Magento 中)?考虑过线程,但由于无法保证内置此功能,因此这似乎不是一个选项....
提前致谢!
所以,我找到了 2 种可能的解决方案:1) 似乎可以通过 core_config_data table create/remove crontabs 而无需 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();
}
}