2017-10-24 3 views
0

셀러리를 시작하려고하는데 셀프를 시작할 수 없습니다. django-celery-beatcelery4을 설치했습니다.셀러리가주기적인 작업을 수행하지 않음.

내 설정 파일. (셀러리 패키지)

설치된 앱

... 
'django_celery_beat', 
'django_celery_results' 

셀러리 구성

CELERY_BROKER_URL = 'redis://localhost:6379/0' 
CELERY_RESULT_BACKEND = 'redis://localhost:6379' 
CELERY_ACCEPT_CONTENT = ['json'] 
CELERY_TASK_SERIALIZER = 'json' 
CELERY_RESULT_SERIALIZER = 'json' 

celery.py

from __future__ import absolute_import, unicode_literals 
import os 
from celery import Celery 

# set the default Django settings module for the 'celery' program. 
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'sandbox.settings') 

app = Celery('sandbox') 

# Using a string here means the worker doesn't have to serialize 
# the configuration object to child processes. 
# - namespace='CELERY' means all celery-related configuration keys 
# should have a `CELERY_` prefix. 
app.config_from_object('django.conf:settings', namespace='CELERY') 

# Load task modules from all registered Django app configs. 
app.autodiscover_tasks() 


@app.task(bind=True) 
def debug_task(self): 
    print('Request: {0!r}'.format(self.request)) 

와 내가 통해 실행되도록 구성 내 간단한 작업, 장고 셀러리의 관리자 패널 이길. 내가 */2 * * * *

로그 내가되어 얻고으로 크론 탭 주기적 작업 (비트)로이 작업을 실행하려고

from __future__ import absolute_import, unicode_literals 
from sandbox.celery import app 


@app.task() 
def try_celery(): 
    print "Trying out Celery" 

,

$ celery -A sandbox worker --loglevel=debug 

[2017-10-24 14:28:02,999: DEBUG/MainProcess] | Worker: Preparing bootsteps. 
[2017-10-24 14:28:03,001: DEBUG/MainProcess] | Worker: Building graph... 
[2017-10-24 14:28:03,002: DEBUG/MainProcess] | Worker: New boot order: {Beat, Timer, Hub, Pool, Autoscaler, StateDB, Consumer} 
[2017-10-24 14:28:03,017: DEBUG/MainProcess] | Consumer: Preparing bootsteps. 
[2017-10-24 14:28:03,017: DEBUG/MainProcess] | Consumer: Building graph... 
[2017-10-24 14:28:03,038: DEBUG/MainProcess] | Consumer: New boot order: {Connection, Events, Mingle, Tasks, Control, Agent, Gossip, Heart, event loop} 

-------------- [email protected] v4.1.0 (latentcall) 
---- **** ----- 
--- * *** * -- Linux-4.9.0-kali3-amd64-x86_64-with-Kali-kali-rolling-kali-rolling 2017-10-24 14:28:03 
-- * - **** --- 
- ** ---------- [config] 
- ** ---------- .> app:   sandbox:0x7fe519d38610 
- ** ---------- .> transport: redis://localhost:6379/0 
- ** ---------- .> results:  redis://localhost:6379/ 
- *** --- * --- .> concurrency: 2 (prefork) 
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) 
--- ***** ----- 
-------------- [queues] 
       .> celery   exchange=celery(direct) key=celery 


[tasks] 
    . celery.accumulate 
    . celery.backend_cleanup 
    . celery.chain 
    . celery.chord 
    . celery.chord_unlock 
    . celery.chunks 
    . celery.group 
    . celery.map 
    . celery.starmap 
    . sandbox.applications.cats.try_celery 
    . sandbox.celery.debug_task 

[2017-10-24 14:28:03,053: DEBUG/MainProcess] | Worker: Starting Hub 
[2017-10-24 14:28:03,053: DEBUG/MainProcess] ^-- substep ok 
[2017-10-24 14:28:03,053: DEBUG/MainProcess] | Worker: Starting Pool 
[2017-10-24 14:28:03,197: DEBUG/MainProcess] ^-- substep ok 
[2017-10-24 14:28:03,198: DEBUG/MainProcess] | Worker: Starting Consumer 
[2017-10-24 14:28:03,199: DEBUG/MainProcess] | Consumer: Starting Connection 
[2017-10-24 14:28:03,216: INFO/MainProcess] Connected to redis://localhost:6379/0 
[2017-10-24 14:28:03,217: DEBUG/MainProcess] ^-- substep ok 
[2017-10-24 14:28:03,217: DEBUG/MainProcess] | Consumer: Starting Events 
[2017-10-24 14:28:03,228: DEBUG/MainProcess] ^-- substep ok 
[2017-10-24 14:28:03,229: DEBUG/MainProcess] | Consumer: Starting Mingle 
[2017-10-24 14:28:03,229: INFO/MainProcess] mingle: searching for neighbors 
[2017-10-24 14:28:04,255: INFO/MainProcess] mingle: all alone 
[2017-10-24 14:28:04,256: DEBUG/MainProcess] ^-- substep ok 
[2017-10-24 14:28:04,256: DEBUG/MainProcess] | Consumer: Starting Tasks 
[2017-10-24 14:28:04,273: DEBUG/MainProcess] ^-- substep ok 
[2017-10-24 14:28:04,274: DEBUG/MainProcess] | Consumer: Starting Control 
[2017-10-24 14:28:04,277: DEBUG/MainProcess] ^-- substep ok 
[2017-10-24 14:28:04,277: DEBUG/MainProcess] | Consumer: Starting Gossip 
[2017-10-24 14:28:04,281: DEBUG/MainProcess] ^-- substep ok 
[2017-10-24 14:28:04,282: DEBUG/MainProcess] | Consumer: Starting Heart 
[2017-10-24 14:28:04,284: DEBUG/MainProcess] ^-- substep ok 
[2017-10-24 14:28:04,284: DEBUG/MainProcess] | Consumer: Starting event loop 
[2017-10-24 14:28:04,285: DEBUG/MainProcess] | Worker: Hub.register Pool... 
[2017-10-24 14:28:04,294: WARNING/MainProcess] /home/alexd/.virtualenvs/skate/local/lib/python2.7/site-packages/celery/fixups/django.py:202: UserWarning: Using settings.DEBUG leads to a memory leak, never use this setting in production environments! 
    warnings.warn('Using settings.DEBUG leads to a memory leak, never ' 
[2017-10-24 14:28:04,294: INFO/MainProcess] [email protected] ready. 
[2017-10-24 14:28:04,295: DEBUG/MainProcess] basic.qos: prefetch_count->8 

내 작업이 작동하지 않는 이유 ? 셀러리를 실행

업데이트

로그

$ celery -A sandbox beat --loglevel=debug 
celery beat v4.1.0 (latentcall) is starting. 
Stale pidfile exists - Removing it. 
__ - ... __ -  _ 
LocalTime -> 2017-10-24 15:07:20 
Configuration -> 
    . broker -> redis://localhost:6379/0 
    . loader -> celery.loaders.app.AppLoader 
    . scheduler -> celery.beat.PersistentScheduler 
    . db -> celerybeat-schedule 
    . logfile -> [stderr]@%DEBUG 
    . maxinterval -> 5.00 minutes (300s) 
[2017-10-24 15:07:20,216: DEBUG/MainProcess] Setting default socket timeout to 30 
[2017-10-24 15:07:20,217: INFO/MainProcess] beat: Starting... 
[2017-10-24 15:07:20,372: DEBUG/MainProcess] Current schedule: 

[2017-10-24 15:07:20,373: DEBUG/MainProcess] beat: Ticking with max interval->5.00 minutes 
[2017-10-24 15:07:20,373: DEBUG/MainProcess] beat: Waking up in 5.00 minutes. 
[2017-10-24 15:15:43,232: DEBUG/MainProcess] beat: Synchronizing schedule... 
[2017-10-24 15:15:43,245: DEBUG/MainProcess] beat: Waking up in 5.00 minutes. 

를 이길로 작업 enter image description here 이 작업이 관리자의주기적인 작업으로 생성하는 방법입니다 생성.

ps. 나는 간격 옵션으로 변경, 내 cron 탭에 몇 가지 문제가있을 수 있습니까? 어쨌든 여전히 작동하지 않습니다.

+0

될 것이다.org/en/latest/userguide/periodic-tasks.html # starting-the-scheduler) 셀러리 비트 스케줄을 시작하려면 $ 셀러리 -A proj beat'를 실행하십시오. '아니다'. – sytech

+0

질문을 비트 스케줄러의 출력으로 업데이트했습니다. 당신이 디폴트'celery.beat.PersistentScheduler'를 사용하고있는 것처럼 보입니다. [문서에 따르면] (http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html#using-custom-scheduler-classes),이 확장을 위해 데이터베이스 스케줄러를 사용하려고합니다. 그래서 아마도 문서가'--scheduler django_celery_beat.schedulers : DatabaseScheduler'를 제안 할 때 데이터베이스 스케줄러를 지정하는 옵션을 추가해보십시오. 차이가 있는지 확인하십시오. 또한 데이터베이스 마이그레이션을 수행하는 것을 잊지 마십시오. – sytech

+0

잘 내 문제를 해결 @ @ytech, 감사합니다. 대답을 써서 받아 들일 수 있습니까? – Rivadiz

답변

0

근본 원인으로 노동자를 실행해야 참조 비트 스케줄러가 적절한 인수를 시작해야한다는 것입니다. (일반 셀러리 노동자에 반대)을 당신이 beat보다는 worker 지정해야 일정을 이길와 셀러리를 시작하는, 그러나

$ celery -A sandbox worker --loglevel=debug 

다음과 같은 명령을 공급했다. 또한 django_celery_beat 확장을 사용하는 경우 기본 스케줄러 celery.beat.PersistentScheduler 대신 데이터베이스 스케줄러 django_celery_beat.schedulers:DatabaseScheduler을 사용해야합니다. //docs.celeryproject :

그래서 수정 명령은 [문서] (HTTP에 따르면

$ celery -A sandbox beat --loglevel=debug --scheduler=django_celery_beat.schedulers:DatabaseScheduler 

Supporting documentation

0

나는 cron shcedule을 정의하지 않았다고 생각합니다. 저장 위치는 어디입니까? 일반적으로 디스크 또는 데이터베이스 (django_celery)에 있습니다. http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html

는 또한,이 경우에 비트 옵션

+0

이것은 코멘트 여야합니다. 질문을 업데이트했습니다. – Rivadiz

관련 문제