2012-10-23 4 views
1

Celery을 RabbitMQ 백엔드와 함께 사용하여 페도라에서 비동기 백그라운드 작업을 실행하려고 시도했지만, 실망 스럽지만 신뢰할 수 없습니다. 가장 큰 문제는 가끔씩 동일한 작업을 여러 번 실행한다는 것인데, 그 이유를 진단하는 데 어려움을 겪고 있습니다.Celeryd가 여러 개의 데몬을 실행 중임

DB 코드를 생성하는 작업을 수동으로 실행하여 테스트 했으므로 코드가 여러 번 트리거되는 것으로 생각하지 않습니다. 두 개의 동일한 레코드가 만들어 졌는지 확인하십시오. Django 쉘에서 코드를 실행하면 하나의 레코드 만 생성되므로 문제는 셀러리처럼 보입니다.

나는 3 개의 서버에 각각 celeryd가 실행되고 있고 처음 실행되는 rabbitmq 만 있고 모든 3 개의 서버는 동일한 데이터베이스를 공유합니다. 내 첫 번째는 셀러 리 설정에서 각 서버의 celeryd가 동일한 작업을 검색하고 실행하는 데 문제가 있다는 것입니다. 그러나 셀러리 문서에서는 단일 호스트와 다중 호스트 설정을 구별하는 것으로 보이지 않으므로 각 서버의 settings.py에서 올바른 BROKER_HOST/PORT/USER/PASSWORD/VHOST를 지정했다고 가정하면 " 여러 호스트와 "작업". 이 올바른지?

내가 가진 다른 생각은 내가 어떻게 든 이것을 확인하는 방법을 모르겠지만 어떻게 든 celeryd의 여러 인스턴스를 실행할 수 있다는 것입니다. 두 서버는 페도라 13 실행하고 나는 ps aux | grep .*.py을 실행할 때 얻을 :

root  24806 0.1 1.8 51404 31328 ?  Sl Oct19 9:25 ../../.env/bin/python manage.py celeryd -f /var/log/myapp/celeryd.log -l WARNING --pidfile /var/run/celeryd.pid -B --scheduler djcelery.schedulers.DatabaseScheduler 
root  24900 0.1 1.6 51404 28592 ?  S Oct19 6:02 ../../.env/bin/python manage.py celeryd -f /var/log/myapp/celeryd.log -l WARNING --pidfile /var/run/celeryd.pid -B --scheduler djcelery.schedulers.DatabaseScheduler 
root  24901 0.3 9.4 183232 161948 ?  S Oct19 22:32 ../../.env/bin/python manage.py celeryd -f /var/log/myapp/celeryd.log -l WARNING --pidfile /var/run/celeryd.pid -B --scheduler djcelery.schedulers.DatabaseScheduler 

이 celeryd의 3 개 별도의 인스턴스가 있음을 실행하는이 나타 냅니까? 그렇다면이 오류가 발생합니까? 2 개를 죽여야합니까?

내 세 번째 서버가 다른 서비스 프레임 워크를 가진 Fedora 17을 실행 중입니다. 내가 systemctl status celeryd.service를 실행할 때 내가 얻을 :

celeryd.service - LSB: celery task worker daemon 
     Loaded: loaded (/etc/rc.d/init.d/celeryd) 
     Active: active (exited) since Fri, 19 Oct 2012 10:59:38 -0400; 4 days ago 
    Process: 732 ExecStop=/etc/rc.d/init.d/celeryd stop (code=exited, status=0/SUCCESS) 
    Process: 738 ExecStart=/etc/rc.d/init.d/celeryd start (code=exited, status=0/SUCCESS) 
     CGroup: name=systemd:/system/celeryd.service 

나는이 해석하는 방법을 모르겠어요. "Active"는 일반적으로 실행 중이지만 "종료"는 일반적으로 실행 중이 아님을 의미합니다. 내가 ps aux | grep .*celery.*를 실행하면 난 단지 얻을 :

root  25142 0.0 0.0 109400 932 pts/0 S+ 11:28 0:00 grep --color=auto .*celery.* 

그래서이 celeryd가 실행되고 있지, 아니면 다른 뭔가를 찾고해야 의미합니까?

편집 : this 대답을 기반으로, 나는 3 개의 프로세스가 기본값 일 수 있다고 생각합니다.

+0

라인의 오프 -B을 내가 복사가 당신의 여러 인스턴스를 실행하는 것을 나타냅니다 해요 셀러리 비트. 사실입니까? 루트 24901 0.3 9.4 183232 161948? S Oct19 22:32 ../../.env/bin/python manage.py celeryd -f /var/log/myapp/celeryd.log -l 경고 --pidfile /var/run/celeryd.pid -B - -scheduler djcelery.schedulers.DatabaseScheduler –

답변

2

내가 코멘트에 게시하지만, 나는이 문제입니다 확신 여기를 참조 : 비트와

root  24806 0.1 1.8 51404 31328 ?  Sl Oct19 9:25 ../../.env/bin/python manage.py celeryd -f /var/log/myapp/celeryd.log -l WARNING --pidfile /var/run/celeryd.pid -B --scheduler djcelery.schedulers.DatabaseScheduler 
root  24900 0.1 1.6 51404 28592 ?  S Oct19 6:02 ../../.env/bin/python manage.py celeryd -f /var/log/myapp/celeryd.log -l WARNING --pidfile /var/run/celeryd.pid -B --scheduler djcelery.schedulers.DatabaseScheduler 
root  24901 0.3 9.4 183232 161948 ?  S Oct19 22:32 ../../.env/bin/python manage.py celeryd -f /var/log/myapp/celeryd.log -l WARNING --pidfile /var/run/celeryd.pid -B --scheduler djcelery.schedulers.DatabaseScheduler 

실행중인 celeryd 세 번. 따라서 보내는 메시지를 세 번 울립니다.

당신은에 비트, 또는 그 자체 (바람직하게) 실행 celerybeat와 중 하나 개의 인스턴스 만해야하고 celeryd 인스턴스

+0

셀 비트에 대한 요점을 확인하는 문서를 찾았습니다. http://ask.github.com/celery/getting-started/periodic-tasks.html – Cerin