Я хотел бы создать периодическую задачу для сельдерея, используя интерфейс администратора django-celery. У меня есть задание, которое отлично работает при вызове вручную или через script. Это просто не работает через сельдерей. Согласно журналам отладки задача устанавливается на enabled = False
при первом поиске, и мне интересно, почему.
При добавлении периодической задачи и передаче [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.
EDIT: Он работает со следующей настройкой. Я до сих пор не знаю, почему это не работает с джанго-сельдереем.
CELERYBEAT_SCHEDULE = {
"example": {
"task": "<task.module.path>",
"schedule": crontab(),
"args": (1, False)
},
}