2017-06-01 1 views
1

Je mis crontab de céleri comme ci-dessousbeat Céleri: crontab exécuté même tâche DEUX FOIS (10min intervalle)

Proj_root/proj/celery.py

app.conf.update(
    CELERYBEAT_SCHEDULE={ 
     'do_every_1st_day_of_month': { 
      'task': 'foobar', 
      'schedule': crontab(0, 0, day_of_month='1'), 
      'args':() 
     }, 
    }) 

Mais finalement il a été exécuté deux fois, 2017/05/31 23:50:00 et 2017/06/01 00:00:00.

Je ne trouve pas de raison. D'après crontab params, cela ne devrait pas être fait au 2017/05/31.

pourquoi c'est comme ça? et voici le journal connexe à ce moment-là. Si autre partie du projet est nécessaire, je vais appliquer plus tard

[2017-05-31 23:50:00,002: INFO/Beat] Scheduler: Sending due task (foobar) 
[2017-05-31 23:50:00,004: DEBUG/Beat] foobar sent. id->8240fb96-994c-4f96-bf4d-4824f0e0c407 
[2017-05-31 23:50:00,005: DEBUG/Beat] beat: Waking up in 5.00 minutes. 
[2017-05-31 23:50:00,005: INFO/MainProcess] Received task: foobar[8240fb96-994c-4f96-bf4d-4824f0e0c407] 
[2017-05-31 23:50:00,006: DEBUG/MainProcess] TaskPool: Apply <function _fast_trace_task at 0x80740b1e0> (args:('foobar', '8240fb96-994c-4f96-bf4d-4824f0e0c407', {'lang': 'py', 'task': 'foobar', 'id': '8240fb96-994c-4f96-bf4d-4824f0e0c407', 'eta': None, 'expires': None, 'group': None, 'retries': 0, 'timelimit': [None, None], 'root_id': '8240fb96-994c-4f96-bf4d-4824f0e0c407', 'parent_id': None, 'argsrepr': '()', 'kwargsrepr': '{}', 'origin': '[email protected]', 'reply_to': '257ab156-57fa-3806-bdf1-28d5501b0472', 'correlation_id': '8240fb96-994c-4f96-bf4d-4824f0e0c407', 'delivery_info': {'exchange': '', 'routing_key': 'celery', 'priority': 0, 'redelivered': None}}, b'[[], {}, {"callbacks": null, "errbacks": null, "chain": null, "chord": null}]', 'application/json', 'utf-8') kwargs:{}) 
[2017-05-31 23:50:00,006: DEBUG/MainProcess] Task accepted: foobar[8240fb96-994c-4f96-bf4d-4824f0e0c407] pid:63838 
[2017-05-31 23:50:00,789: INFO/PoolWorker-4] Task foobar[8240fb96-994c-4f96-bf4d-4824f0e0c407] succeeded in 0.7823948785662651s: None 
[2017-05-31 23:55:00,006: DEBUG/Beat] beat: Synchronizing schedule... 
[2017-05-31 23:55:00,007: DEBUG/Beat] beat: Waking up in 5.00 minutes. 
[2017-05-31 23:59:59,991: DEBUG/Beat] beat: Synchronizing schedule... 
[2017-06-01 00:00:00,001: INFO/Beat] Scheduler: Sending due task do_every_1st_day_of_month (foobar) 
[2017-06-01 00:00:00,004: DEBUG/Beat] foobar sent. id->6da824e0-14bf-4e56-a279-bdc2d466ab1e 
[2017-06-01 00:00:00,006: INFO/MainProcess] Received task: foobar[6da824e0-14bf-4e56-a279-bdc2d466ab1e] 
[2017-06-01 00:00:00,006: DEBUG/MainProcess] TaskPool: Apply <function _fast_trace_task at 0x80740b1e0> (args:('foobar', '6da824e0-14bf-4e56-a279-bdc2d466ab1e', {'lang': 'py', 'task': 'foobar', 'id': '6da824e0-14bf-4e56-a279-bdc2d466ab1e', 'eta': None, 'expires': None, 'group': None, 'retries': 0, 'timelimit': [None, None], 'root_id': '6da824e0-14bf-4e56-a279-bdc2d466ab1e', 'parent_id': None, 'argsrepr': '()', 'kwargsrepr': '{}', 'origin': '[email protected]', 'reply_to': '257ab156-57fa-3806-bdf1-28d5501b0472', 'correlation_id': '6da824e0-14bf-4e56-a279-bdc2d466ab1e', 'delivery_info': {'exchange': '', 'routing_key': 'celery', 'priority': 0, 'redelivered': None}}, b'[[], {}, {"callbacks": null, "errbacks": null, "chain": null, "chord": null}]', 'application/json', 'utf-8') kwargs:{}) 
[2017-06-01 00:00:00,010: DEBUG/MainProcess] Task accepted: foobar[6da824e0-14bf-4e56-a279-bdc2d466ab1e] pid:63838 
[2017-06-01 00:00:00,615: INFO/PoolWorker-4] Task foobar[6da824e0-14bf-4e56-a279-bdc2d466ab1e] succeeded in 0.6074081044644117s: None 

* EDIT 2017.06.05

J'ai trouvé quelque chose d'étrange je regardais journal de céleri, il y a une tâche plus court intervalle deux fois 10 minutes. il court 10 minutes avant l'heure prévue. et a également couru l'heure exacte prévue.

<ScheduleEntry: do-bar-every-midnight bar() <crontab: 0 23 * * * (m/h/d/dM/MY)> 

... 

[2017-05-31 01:33:43,324: DEBUG/Beat] beat: Ticking with max interval->5.00 minutes 
[2017-05-31 22:50:00,002: INFO/Beat] Scheduler: Sending due task do-bar-every-midnight (bar) 
[2017-05-31 22:50:00,003: DEBUG/Beat] bar sent. id->cf9c0268-3071-418a-be60-c7dee75c973b 
[2017-05-31 22:50:00,004: DEBUG/Beat] beat: Waking up in 5.00 minutes. 
[2017-05-31 22:50:00,005: INFO/MainProcess] Received task: bar[cf9c0268-3071-418a-be60-c7dee75c973b] 
[2017-05-31 22:50:00,006: DEBUG/MainProcess] TaskPool: Apply <function _fast_trace_task at 0x80740b1e0> (args:('bar', 'cf9c0268-3071-418a-be60-c7dee75c973b', {'lang': 'py', 'task': 'bar', 'id': 'cf9c0268-3071-418a-be60-c7dee75c973b', 'eta': None, 'expires': None, 'group': None, 'retries': 0, 'timelimit': [None, None], 'root_id': 'cf9c0268-3071-418a-be60-c7dee75c973b', 'parent_id': None, 'argsrepr': '()', 'kwargsrepr': '{}', 'origin': '[email protected]', 'reply_to': '257ab156-57fa-3806-bdf1-28d5501b0472', 'correlation_id': 'cf9c0268-3071-418a-be60-c7dee75c973b', 'delivery_info': {'exchange': '', 'routing_key': 'celery', 'priority': 0, 'redelivered': None}}, b'[[], {}, {"callbacks": null, "errbacks": null, "chain": null, "chord": null}]', 'application/json', 'utf-8') kwargs:{}) 
[2017-05-31 22:50:00,007: DEBUG/MainProcess] Task accepted: bar[cf9c0268-3071-418a-be60-c7dee75c973b] pid:63836 

... 

[2017-05-31 23:00:00,000: INFO/Beat] Scheduler: Sending due task do-bar-every-midnight (bar) 
[2017-05-31 23:00:00,002: DEBUG/Beat] bar sent. id->24c08011-a490-490e-a2fc-fc5ddd12ef27 
[2017-05-31 23:00:00,002: INFO/MainProcess] Received task: bar[24c08011-a490-490e-a2fc-fc5ddd12ef27] 
[2017-05-31 23:00:00,003: DEBUG/MainProcess] TaskPool: Apply <function _fast_trace_task at 0x80740b1e0> (args:('bar', '24c08011-a490-490e-a2fc-fc5ddd12ef27', {'lang': 'py', 'task': 'bar', 'id': '24c08011-a490-490e-a2fc-fc5ddd12ef27', 'eta': None, 'expires': None, 'group': None, 'retries': 0, 'timelimit': [None, None], 'root_id': '24c08011-a490-490e-a2fc-fc5ddd12ef27', 'parent_id': None, 'argsrepr': '()', 'kwargsrepr': '{}', 'origin': '[email protected]', 'reply_to': '257ab156-57fa-3806-bdf1-28d5501b0472', 'correlation_id': '24c08011-a490-490e-a2fc-fc5ddd12ef27', 'delivery_info': {'exchange': '', 'routing_key': 'celery', 'priority': 0, 'redelivered': None}}, b'[[], {}, {"callbacks": null, "errbacks": null, "chain": null, "chord": null}]', 'application/json', 'utf-8') kwargs:{}) 
[2017-05-31 23:00:00,004: DEBUG/MainProcess] Task accepted: bar[24c08011-a490-490e-a2fc-fc5ddd12ef27] pid:63838 
... 
[2017-05-31 23:05:37,901: INFO/PoolWorker-4] Task bar[24c08011-a490-490e-a2fc-fc5ddd12ef27] succeeded in 337.8967144470662s: datetime.datetime(2017, 5, 31, 23, 5, 37, 899685) 
... 
[2017-05-31 23:05:40,014: INFO/PoolWorker-2] Task bar[cf9c0268-3071-418a-be60-c7dee75c973b] succeeded in 940.0073816571385s: datetime.datetime(2017, 5, 31, 23, 5, 40, 10523) 

je retracée aux journaux quelques jours avant, le cas de la tâche « bar »

[2017-05-23 05:37:51,155: INFO/Beat] beat: Starting... 
... 
[2017-05-23 22:50:00,004: DEBUG/Beat] bar sent. id->2bfe3ab4-abfd-419e-bfe1-8f64cebe0739 
[2017-05-23 23:00:00,002: DEBUG/Beat] bar sent. id->96eeb154-688a-4e19-b793-c1017e3dcdfc 
[2017-05-24 22:50:00,003: DEBUG/Beat] bar sent. id->b02db272-712f-4a5b-83d7-1823181367fa 
[2017-05-24 23:00:00,002: DEBUG/Beat] bar sent. id->f510be26-7155-4707-b0da-309bf6e4d938 
[2017-05-25 23:00:00,004: DEBUG/Beat] bar sent. id->67108a9f-5629-46e8-bd32-e7c7a5eaaa31 
[2017-05-26 23:00:00,002: DEBUG/Beat] bar sent. id->d85cc8a0-c68d-4762-bd81-8ddfea19f177 
[2017-05-27 23:00:00,002: DEBUG/Beat] bar sent. id->a1203df4-ac84-43ea-8ba8-c6f984e205d1 
[2017-05-28 23:00:00,005: DEBUG/Beat] bar sent. id->716f01dd-f802-44a4-af40-801505317e71 

je suppose, comme @yetship dit avant, il fonctionne deux fois quand il première tâche de lancement après exécuter le battement de céleri. mais il n'a pas exécuté le temps exact de la tâche lorsque le céleri a commencé à battre, il fonctionne 10 minutes plus tôt que prévu. J'ai couru céleri battre 05-23 05:37:51

Je pense que le problème est spécifié, comment puis-je l'empêcher de courir 10 min avant ..? et aussi le faire fonctionner une fois?

Répondre

0

Il n'y a rien de mal pour cela. la raison de cela est céleri courir dans 05-31 et quand il commence, je pense que vous ne l'avez pas exécuté avant et il a constaté que le 05-01, il n'est pas exécuté et céleri pense qu'il devrait fonctionner, donc il fonctionne.

et pour 06-01, cette série est pour juin, et elle tourne au bon moment. Donc, le résultat est que je pense que vous démarrez votre batteur à céleri à 2017-05-31 23:50:00, n'est-ce pas?

+0

Nous vous remercions de votre réponse! : D mais je n'ai pas couru de céleri à ce moment-là, en fait j'ai couru célerie deamon au 2017-05-19. À ce moment céleri n'a jamais exécuté la tâche jusqu'à 2017-05-31 23:50:00 ...: O et puis-je avoir de la documentation liée à ce que vous écrivez? :) Merci!! –

+0

et si c'est vrai, y a-t-il un moyen d'empêcher le battement de céleri de s'exécuter au sujet de la date passée? Merci encore! –

+0

c'est incroyable, avez-vous déjà changé le temps de la machine? à propos de ce que je dis avant, peut-être vous pouvez vérifier l'implémentation du code pour céleri 'crontab' à [github] (https://github.com/celery/celery/blob/master/celery/schedules.py) @zisoozzoi – Liqiang

0

L'une des raisons pour lesquelles il aurait pu se produire est parce que votre

Céleri est en baisse et la tâche qui devait être exécuté est resté dans la file d'attente et n'a pas pu être exécuté, mais a été exécuté à 23: 50 (quand le céleri était levé). Pouvez-vous s'il vous plaît confirmer que le céleri était opérationnel tout le temps.

De même, les tâches se sont-elles exécutées comme prévu?

+0

J'ai regardé le journal, mais je ne peux pas trouver le journal de céleri vers le bas: O J'ai trouvé chaque journal de céleri de minutes de [2017-05-31 01: 33: 42,396] ~ [2017-06-01 01:54: 00,861] –