在 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();
    }
}