2017-11-03 2 views
1

セロリー4.1を使用していて、crontabタスクで時間を設定する以外は、すべての定期タスクが正しく機能します。私はタイムゾーンの設定と関係があると思っていましたが、問題がどこにあるのか分かりません。セロリが時間を設定してもcrontabタスクを送信しない

ダッシュボード/ celery.py

from __future__ import absolute_import, unicode_literals 
from celery import Celery 

app = Celery('dashboard', 
     broker='redis://', 
     backend='redis://localhost', 
     include=['dashboard.tasks']) 

app.conf.update(
    result_expires=3600, 
    enable_utc = False, 
    timezone = 'America/New_York' 
) 


if __name__ == '__main__': 
    app.start() 

これは動作します:

@app.task 
@periodic_task(run_every=(crontab())) 
def shutdown_vms(): 
    inst = C2CManage(['stop','kube']) 
    inst.run() 
    return 

これは動作します:

@app.task 
@periodic_task(run_every=(crontab(minute=30,hour='*'))) 
def shutdown_vms(): 
    inst = C2CManage(['stop','kube']) 
    inst.run() 
    return 

これは動作しません:

@app.task 
@periodic_task(run_every=(crontab(minute=30,hour=6))) 
def shutdown_vms(): 
    inst = C2CManage(['stop','kube']) 
    inst.run() 
    return 

ビートがうまくタスク拾っ:

<ScheduleEntry: dashboard.tasks.shutdown_vms dashboard.tasks.shutdown_vms() <crontab: 30 6 * * * (m/h/d/dM/MY)> 

をしかし、それは、それを送信することはありません。私は週末にプロセスを実行させ、タスクを提出することはありません。私は何が間違っているのか分からない。 timedeltaの周期性で動作する他のタスクがあり、それらはすべて完全に動作します。

ご協力いただければ幸いです。

EDIT:ホストはAmerica/New_Yorkタイムゾーンを使用するように設定されています。

EDIT2:別のプロセスとしてビートを実行している:

celery -A dashboard worker -l info 

celery -A dashboard beat -l debug 

私はほとんど外し、それらを実行するか、またはマルチ使用しています。

答えて

0

このバグが原因です。 UTCを使用しない場合にスケジューリングが正しく計算されていないことを示している

https://github.com/celery/celery/issues/4177

そして他のいくつか。

切り替えセロリは、タイムゾーンとしてUTCを使用し、utcを有効にして正常に動作します。

1

私が使用セロリ== 4.0.1あまりにも私のためにそれを修正

+0

することにより、この問題を解決する...それは本当にエキゾチック、セロリの開発チームは、種類12をバックエンドを追加するために、世界のすべての時間を持っている私をいらいらxyzをフィーチャーして、設定の命名規則全体を「小文字」に変更し、あたかもセーラーを主な目的のために安定させることができないときに、 –

+0

私にとってセロリ4.1で始まり、UTCを使うのは良い解決策でした。あなたがそれを働かせるのに役立つものは何でも、行く方法です。私は仕事の優先順位についてあなたに同意しますが、あなたの暇な時間に物事をサポートしている人には不平を言うのは難しいです... – Drew

+0

セロリ4.1を使用し、UTCタイムゾーンを設定すると、時間が正しくないUTC時間 – guangyao

関連する問題