首页 文章

任何解雇Magento cronjob的方法

提问于
浏览
0

给定:在Config.xml中具有正确配置的cronjob(假设,每5分钟)的扩展 . 此外,系统cron设置为运行Magento的cron.sh.安装扩展后,cronjob必须运行几次,当它没有更多要处理的数据时,它就会变得过时 .

问题:处理完所有数据后不需要该作业 . 但是,它在Config.xml中的设置会使它永远每5分钟运行一次,只是为了检查没有更多的数据而死掉 .

问题:是否有任何正确的方法(可能使用cron_schedule表...)当它看到没有更多数据时,以编程方式从其自己的PHP中“解散”cronjob?还是其他任何方式?使用cron是因为不应中断扩展安装过程 . 也许有可能以某种其他方式安排一些PHP代码而不是cron(但在Magento中)?考虑线程,但由于无法保证此功能将被内置,这似乎不是选项....

提前致谢!

1 回答

  • 0

    所以,我找到了两个可能的解决方案:1)似乎可以通过core_config_data表创建/删除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();
        }
    }
    

相关问题