2017-03-21 19 views
3

* django-celery-beat 1.0.1は定期的なタスクのスケジューリングに問題があるため、celery 3.1.25を使用しています。Celery(Django)でスケジュールされた定期的なタスクの次の実行時間を確認してください

最近、セラービートに関する問題が発生し、1日以上の間隔を持った定期的なタスクがスケジューラによって「忘れられた」ように見えます。間隔をevery 5 secondsに変更すると、タスクは正常に実行され(5秒ごとに)、last_run_at属性が更新されます。これは、セルラービートがある程度スケジューラーに応答していることを意味しますが、last_run_atつまりPeriodicTask.objects.update(last_run_at=None)をリセットすると、every dayの間隔のタスクはもう実行されません。

Celerybeatが一点でクラッシュしていて、何かが壊れている可能性があるので、問題が解決しないかどうかを確認するために新しいvirtualenvとデータベースを作成しました。次の実行時間を取得する方法があるかどうかを知りたいので、定期的なタスクが実行されたかどうかを知るために1日待つ必要はありません。

inspect <active/scheduled/reserved>を使用してみましたが、すべてemptyが返されました。 djceleryのデータベーススケジューラを使用して周期的なタスクを実行する場合、これは正常ですか?

ここでスケジュールタスク機能です:あなたは、シェルに入るとapp.conf.CELERYBEAT_SCEDULEを見て、あなたのスケジューラを見ることができます

def schedule_data_collection(request, project): 
    if (request.method == 'POST'): 
     interval = request.POST.get('interval') 

     target_project = Project.objects.get(url_path=project)  
     interval_schedule = dict(every=json.loads(interval), period='days') 

     schedule, created = IntervalSchedule.objects.get_or_create(
      every=interval_schedule['every'], 
      period=interval_schedule['period'], 
     ) 

     task_name = '{} data collection'.format(target_project.name) 

     try: 
      task = PeriodicTask.objects.get(name=task_name) 
     except PeriodicTask.DoesNotExist: 
      task = PeriodicTask.objects.create(
       interval=schedule, 
       name=task_name, 
       task='myapp.tasks.collect_tool_data', 
       args=json.dumps([target_project.url_path]) 
      ) 
     else: 
      if task.interval != schedule: 
       task.interval = schedule 

      if task.enabled is False: 
       task.enabled = True 

      task.save() 

     return HttpResponse(task.interval) 
    else: 
     return HttpResponseForbidden() 
+0

バックエンドには何が使用されていますか?データベースに登録する必要があります。 – sdolan

+0

@sdolan私はRabbitMQ w/PostgreSQLを使用しています。スケジューラは、タスクの新しいインスタンスを追加するときには常に更新されますが、それでも実行するにはワーカーを起動しません。 – FatHippo

答えて

-1

が。

celery -A myApp shell 
print(app.conf.CELERYBEAT_SCHEDULE) 

すべての定期タスクが表示されます。

関連する問題