mysql - 有什么方法可以消除 Magento 中的 cronjob

标签 mysql magento cron

给定:在 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/

相关文章:

python - python 中休假报告逻辑和函数所需的指导

php - 拯救数据库中损坏的字符

magento - 从 Magento v2.0 SOAP API 获取产品类别 ID

mysql - 我应该使用 MySQL View 还是报告 cronjob

php - 以下sql查询中的错误处理

MySQL - SUM/COUNT 来自不同表的不同列

php - 如何使用product_index改进Magento查询

magento - Magento-通过API更新订单状态

javascript - cron 作业内的 Promise 未执行

php - 使用 php.exe 在 Windows 8.1 中将 php 文件作为 cron 作业运行