任何解雇Magento cronjob的方法

时间:2015-01-12 11:29:49

标签: mysql magento cron

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

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

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

提前致谢!

1 个答案:

答案 0 :(得分: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();
    }
}