セロリー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
私はほとんど外し、それらを実行するか、またはマルチ使用しています。
することにより、この問題を解決する...それは本当にエキゾチック、セロリの開発チームは、種類12をバックエンドを追加するために、世界のすべての時間を持っている私をいらいらxyzをフィーチャーして、設定の命名規則全体を「小文字」に変更し、あたかもセーラーを主な目的のために安定させることができないときに、 –
私にとってセロリ4.1で始まり、UTCを使うのは良い解決策でした。あなたがそれを働かせるのに役立つものは何でも、行く方法です。私は仕事の優先順位についてあなたに同意しますが、あなたの暇な時間に物事をサポートしている人には不平を言うのは難しいです... – Drew
セロリ4.1を使用し、UTCタイムゾーンを設定すると、時間が正しくないUTC時間 – guangyao