odoo定时任务

python代码

# -*- encoding: utf-8 -*-

from openerp.osv import fields, osv, orm
import logging

_logger = logging.getLogger(__name__)

class auto_checkorder(osv.Model):
    _name = 'auto.checkorder'

    _columns = {
    }
    _defaults = {
    }

    def checkorder(self, cr, user, context={}):
        print 11111111

xml代码

<?xml version="1.0" ?>
<openerp>
    <data noupdate="1">
        <record id="ir_cron_backupscheduler0" model="ir.cron">
            <field eval="&quot;&quot;&quot;checkorder&quot;&quot;&quot;" name="function"/>
            <field eval="&quot;&quot;&quot;minutes&quot;&quot;&quot;" name="interval_type"/>
            <field name="user_id" ref="base.user_root"/>
            <field eval="&quot;&quot;&quot;Check Orders&quot;&quot;&quot;" name="name"/>
            <field eval="-1" name="numbercall"/>
            <field eval="&quot;&quot;&quot;2010-01-07 11:35:28&quot;&quot;&quot;" name="nextcall"/>
            <field eval="5" name="priority"/>
            <field eval="0" name="doall"/>
            <field eval="True" name="active"/>
            <field eval="1" name="interval_number"/>
            <field eval="&quot;&quot;&quot;auto.checkorder&quot;&quot;&quot;" name="model"/>
        </record>
    </data>
</openerp>
  • name 即该task的名称,由用户定义为该task主要的职责
  • user_id 对应res_users表,需要一个用户ID
  • active 是否激活该task,默认为True
  • interval_number 间隔时间,类型为integer
  • interval_type 执行task的周期类型,只能选择分钟、小时、天、周、月,可惜没有秒。
  • numbercall 方法调用多少次,-1则是没有限制
  • doall 如果任务执行时间错过了服务器重启时间是否重新执行任务
  • nextcall 下次的调用时间,我们不用配置,oe会自动计算
  • model 即模块名称
  • function 要执行的方法
  • args 传递的参数
  • priority 任务优先级别 0是最高级别,10是最低级别

转载于:https://www.cnblogs.com/hltswd/p/5805715.html

### Odoo定时任务不执行的原因及解决方案 在Odoo中,定时任务(Cron Jobs)是一种非常重要的功能,用于定期执行某些后台操作。然而,在实际应用过程中可能会遇到定时任务无法正常执行的情况。以下是可能导致此问题的一些常见原因及其对应的解决方案。 #### 1. **服务器未启动调度程序** 如果Odoo服务器没有启用`--workers`参数或多线程模式,则可能不会运行任何定时任务。这是因为默认情况下,单进程模式下的Odoo实例不会主动触发定时任务[^1]。 **解决方案**: 确保在启动Odoo服务时启用了多线程支持。可以通过命令行指定`--workers=N`选项,其中N表示并发工作的数量。例如: ```bash odoo-bin --workers=2 ``` #### 2. **数据库中的ir.cron记录被禁用** 每条定时任务都对应于数据库表`ir.cron`中的一条记录。如果该记录的状态字段`active`被设置为False,则相应的定时任务会被禁用。 **解决方案**: 进入开发者模式,导航至技术->自动化->计划动作,找到目标定时任务并确认其状态是否已激活。如果没有,请将其切换回活动状态[^2]。 #### 3. **时间间隔配置不当** 有时即使定时任务处于活跃状态,但如果设定的时间间隔不合理或者超出了预期范围,也可能导致看似“无响应”的现象。 **解决方案**: 重新审视相关联的模型方法以及cron表达式的准确性;调整合适的周期频率以满足业务需求[^3]。 #### 4. **依赖的服务不可达或失败** 部分复杂的定时任务可能涉及到外部API调用或其他系统间的交互。一旦这些关联环节出现问题(比如网络中断),整个流程就有可能停滞下来。 **解决方案**: 检查日志文件寻找潜在错误提示,并验证所有必要的第三方接口连接状况良好。对于可能出现异常的地方增加健壮性的处理措施,如重试机制等[^4]。 #### 5. **权限不足** 假设某个特定用户的访问级别不足以完成某项预定的操作,那么即便到了预设时刻也不会被执行出来。 **解决方案**: 审查负责执行这项作业的角色是否有足够的权利去触及所需的数据对象和服务资源。必要时候赋予更高的管理权限给这个账户[^5]。 --- ### 示例代码:调试与修复定时任务 下面是一个简单的Python脚本片段用来演示如何手动触发一个已经存在的定时任务: ```python from odoo import api, models class MyModel(models.Model): _name = 'my.model' @api.model def my_scheduled_action(self): """This function will be called by the cron job.""" self.env['other.model'].do_something() # To manually invoke this method from another place within your module: self.env['my.model'].sudo().with_context(cron=True).my_scheduled_action() ``` 通过这种方式可以在开发阶段快速定位问题所在之处。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值