2012-04-06 53 views
0

我尝试使用这个solution但没有成功。我怎样才能指定一个月的哪一天执行任务?我的解决办法我如何安排在每月的特定日期运行的芹菜任务?

class DayOfMonth(schedule): 

    def __init__(self, day=1): 
     self.day = day 

    def is_due(self, last_run_at): 
     now = datetime.datetime.now() 
     if now.month != last_run_at.month and now.day == self.day: 
      return True, 3000 
     return False, 3000 

    def __eq__(self, other): 
      if isinstance(other, DayOfMonth): 
       return self.day == other.day and self.month == other.month 
      return False 

我试着涂时用Django的芹菜运行它,但我仍然收到错误未指定run_every的。

编辑1:

我跑我的任务添加:

"my_task": { 
     "task": "util.tasks.CeleryManagementCommand", 
     "schedule": DayOfMonth(day=4), 
     "args": ('my_task',), 
    }, 

CELERYBEAT_SHEDULE字典

编辑2:

当我在初始化指定run_every - >self.run_every = None我会收到一个错误,即无类型对象没有属性total_seconds

+0

你为什么不这样做通过cron工作? – Ahsan 2012-04-06 07:47:15

+0

你可以显示用于创建任务的代码吗? – 2012-04-06 08:39:01

+0

因为我必须使用芹菜这 – szaman 2012-04-12 11:24:25

回答

1

如果您继承并更改init您最好确保致电父母的init。 我敢肯定,这将解决您的问题:

class DayOfMonth(schedule): 

    def __init__(self, day=1, *args, **kwargs): 
     super(DayOfMonth, self).__init__(*args, **kwargs) 
     self.day = day 

如果你检查这一点,将阐明你遇到的错误淡淡的道: https://github.com/ask/celery/blob/master/celery/schedules.py#L33

+0

好吧,我会看看:) – szaman 2012-04-07 05:55:29

+0

不幸的是这一个没有帮助:( – szaman 2012-04-12 11:23:57

相关问题