2011-05-25 81 views
11

我想創建一個定期任務芹菜使用django芹菜的管理界面。我有一個設置好的任務,當手動或通過腳本調用時它運行的很好。它只是不能通過celerybeat。根據調試日誌,任務在第一次檢索時設置爲enabled = False,我不知道爲什麼。celerybeat自動禁用定期任務

添加週期性任務並傳遞[1, False]作爲位置參數時,該任務會自動禁用,並且我看不到任何其他輸出。當沒有參數添加時,任務被執行,但立即引發異常,因爲我沒有提供所需的參數(有意義)。

有沒有人看到這裏有什麼問題?

在此先感謝。

這是提供參數後的輸出:

[DEBUG/Beat] SELECT "djcelery_periodictask"."id", [...] 
      FROM "djcelery_periodictask" 
      WHERE "djcelery_periodictask"."enabled" = true ; args=(True,) 

[DEBUG/Beat] SELECT "djcelery_intervalschedule"."id", [...] 
      FROM "djcelery_intervalschedule" 
      WHERE "djcelery_intervalschedule"."id" = 3 ; args=(3,) 

[DEBUG/Beat] SELECT (1) AS "a" 
      FROM "djcelery_periodictask" 
      WHERE "djcelery_periodictask"."id" = 3 LIMIT 1; args=(3,) 

[DEBUG/Beat] UPDATE "djcelery_periodictask" 
      SET "name" = E'<taskname>', "task" = E'<task.module.path>', 
       "interval_id" = 3, "crontab_id" = NULL, 
       "args" = E'[1, False,]', "kwargs" = E'{}', "queue" = NULL, 
       "exchange" = NULL, "routing_key" = NULL, 
       "expires" = NULL, "enabled" = false, 
       "last_run_at" = E'2011-05-25 00:45:23.242387', "total_run_count" = 9, 
       "date_changed" = E'2011-05-25 09:28:06.201148' 
      WHERE "djcelery_periodictask"."id" = 3; 
      args=(
        u'<periodic-task-name>', u'<task.module.path>', 
        3, u'[1, False,]', u'{}', 
        False, u'2011-05-25 00:45:23.242387', 9, 
        u'2011-05-25 09:28:06.201148', 3 
      ) 

[DEBUG/Beat] Current schedule: 
<ModelEntry: celery.backend_cleanup celery.backend_cleanup(*[], **{}) {<crontab: 0 4 * (m/h/d)>} 
[DEBUG/Beat] Celerybeat: Waking up in 5.00 seconds. 

編輯: 它與以下設置。我仍然不知道爲什麼它不適用於django-celery

CELERYBEAT_SCHEDULE = { 
    "example": { 
     "task": "<task.module.path>", 
     "schedule": crontab(), 
     "args": (1, False) 
    }, 
} 
+0

你可以發佈你的任務和periodictask配置? – 2011-05-25 11:35:09

+0

感謝您關注我的問題。我沒有設置'CELERYBEAT_SCHEDULE',因爲我改用了django-芹菜的管理。我也檢查了[FAQ](http://docs.celeryproject.org/en/latest/faq.html#why-won-t-my-task-run),但正如我在原貼中所說的,我是能夠手動從shell啓動任務。還有什麼我可以忽略的? – jnns 2011-05-25 15:38:53

+0

有完全相同的問題...任何解決方案? – Aldarund 2011-06-14 21:36:29

回答

14

我有同樣的問題。確保參數是JSON格式。例如,嘗試將位置參數設置爲[1,false] - 小寫'false' - 我只是在django-celery實例(版本2.2.4)上對其進行了測試,並且它工作正常。

對於關鍵字指定參數時,使用類似{「名」:「aldarund」}

+1

是的,我確認,問題是編碼。實際上,對於字符串參數,你必須使用雙引號「而不是單個引號」。 – 2011-07-11 09:48:20

7

我得到了同樣的問題太多。

使用djcelery中的PeriodicTask模型(「JSON編碼的位置參數」)的描述,與Evan的答案相同。我嘗試使用python json lib在保存之前進行編碼。

和我一起這項工作

import json 
o = PeriodicTask() 
o.kwargs = json.dumps({'myargs': 'hello'}) 
o.save() 

芹菜版本3.0.11

+0

guys這個答案實際上解決了我的問題。 – vipin 2015-05-20 05:30:16