2014-02-10 3 views
2

정기적 인 작업을 사용하여 json 피드를 폴링하고이를 기반으로 작업을 자동화하는 응용 프로그램에서 Celery 3.0.24 및 Celery-with-redis 3.0을 실행하고 있습니다.셀러리 정기 작업이 너무 많이 선택되었습니다.

셀러 리는 1 분마다 적절한 작업이 발생하고 있다고 정확하게 알려줍니다. 그러나 작업이 2 ~ 3 회 집계 된 것으로 보입니다. 그 결과로 앱이 두 배나 세 번씩 실행됩니다.

일반적으로 문제는 하루 또는 한 주 동안 발생하지 않지만 시작되고 앱을 중지했다가 다시 시작 함에도 불구하고 사라지지 않습니다.

세부 사항 :

  • 관리자로 실행은
  • 큐 레디 스 (하지 RabbitMQ)

가 실행중인 프로세스 (추신 보조 스타일)이 같이 나타에 :

[[email protected]:MainProcess] -active- (worker --config celeryconfig --beat --schedule=/mnt/services/my_app/var/lib/celerybeat --loglevel=INFO --autoreload --app=my_app.queue.tasks --events --queues=my_app) 

셀러리beat.conf :

012 도움말과 팁 사람이에 줄 수 없음을 크게 감상 할 수

@periodic_task(
    run_every=datetime.timedelta(seconds=60), 
    name='tasks.my_app_fetch_and_parse_feed', 
    max_retries=0, 
    queue='my_app', 
    options={'queue': 'my_app'}, 
) 
def my_app_fetch_and_parse_feed(): 
    """ 
    Runs every minute and checks for 
    matches that need notifications sent. 
    """ 
    # some code that's getting run multiple times 
    pass 

: 3,516,

[program:celerybeat] 
command=/mnt/services/my_app/bin/celery worker --config celeryconfig --beat --schedule=/mnt/services/my_app/var/lib/celerybeat --loglevel=INFO --autoreload --app=my_app.queue.tasks --events --queues=my_app 
environment=PYTHONPATH=/mnt/services/my_app/conf 
autostart=false 
autorestart=true 
startsecs=5 
startretries=1 
stopwaitsecs=300 
numprocs=1 
stopsignal=TERM 
killasgroup=true 
stdout_logfile=/mnt/services/my_app/var/log/celerybeat.log 
stderr_logfile=/mnt/services/my_app/var/log/celerybeat.err 

tasks.py이 작업을 포함하고 있습니다! 문제를 해결하는 방법에 대한 모든 아이디어를 통해 문제를 해결했습니다. 정말 고맙습니다!

      • 추가 정보 - - -

셀러리와 관련된 프로세스는 다음과 같습니다

$ ps xuf 
USER  PID %CPU %MEM VSZ RSS TTY  STAT START TIME COMMAND 
507  29554 0.0 0.0 12768 4828 pts/4 S+ 2013 0:00 -bash 
507  22921 0.0 0.0 12920 5408 pts/0 S 19:22 0:00 -bash 
507  25582 0.0 0.0 8584 812 pts/0 R+ 19:41 0:00 \_ ps xuf 
507  13968 0.0 0.0 12804 5376 pts/1 S+ Feb04 0:00 -bash 
507  7617 0.0 0.1 106536 12284 ?  Ss 2013 60:06 python2.7 /mnt/services/my_app/bin/supervisord 
507  23894 13.0 0.3 154644 25168 ?  Rl 19:29 1:32 \_ [[email protected]:MainProcess] -active- (worker --beat --schedule=/mnt/services/my_app/var/lib/celerybeat --loglevel=INFO --autoreload --app=my_app 
507  23901 0.0 0.2 147852 22608 ?  S 19:29 0:00  \_ [celerybeat]                                  
507  23902 6.2 0.3 143476 26288 ?  S 19:29 0:44  \_ [[email protected]:PoolWorker-2]                              
507  23903 6.3 0.3 143980 26712 ?  S 19:29 0:44  \_ [[email protected]:PoolWorker-3] 

아니면 더 자세한에 대한

상자에 셀러리와 관련된 모든 프로세스의 출력은 : 비트의 하나 개 이상의 인스턴스가 내 컴퓨터에서 실행되기 때문에 셀러리 IRC (ionelmc)에서 사랑스러운 사람과 대화시

$ ps aux | grep celery 
APP_TWO 22229 0.0 0.3 164808 26244 ?  Sl 2013 2:01 python2.6 /mnt/services/APP_TWO-john/bin/celeryd --loglevel=INFO --autoreload -A APP_TWO.queue.tasks -E 
APP_TWO 22266 0.0 0.3 153868 25536 ?  S  2013 2:08 python2.6 /mnt/services/APP_TWO-john/bin/celeryd --loglevel=INFO --autoreload -A APP_TWO.queue.tasks -E 
APP_TWO 22267 0.0 0.3 153312 24112 ?  S  2013 2:05 python2.6 /mnt/services/APP_TWO-john/bin/celeryd --loglevel=INFO --autoreload -A APP_TWO.queue.tasks -E 
APP_TWO 22000 0.0 0.0 3820 528 pts/2 S+ 2013 0:01 tail -n 30 -F var/log/celeryd.err 
APP_FOUR 22055 0.0 0.0 3820 516 pts/3 S+ 2013 0:00 tail -F var/log/celeryd.err 
APP_TWO 12190 0.0 0.3 159004 24316 ?  Sl Jan06 0:53 python2.6 /mnt/services/APP_TWO/bin/celeryd --loglevel=INFO --autoreload -A APP_TWO.queue.tasks -E -Q APP_TWO 
APP_TWO 12212 0.0 0.2 140736 20252 ?  S Jan06 0:39 python2.6 /mnt/services/APP_TWO/bin/celeryd --loglevel=INFO --autoreload -A APP_TWO.queue.tasks -E -Q APP_TWO 
APP_TWO 12215 0.0 0.2 140760 20260 ?  S Jan06 0:48 python2.6 /mnt/services/APP_TWO/bin/celeryd --loglevel=INFO --autoreload -A APP_TWO.queue.tasks -E -Q APP_TWO 
flume-ng 27903 0.0 0.0 3816 524 ?  S Jan24 0:00 tail -F /mnt/services/APP_TWO/var/log/celeryd.err 
flume-ng 27904 0.0 0.0 3816 524 ?  S Jan24 0:00 tail -F /mnt/services/APP_FOUR/var/log/celeryd.log 
flume-ng 27927 0.0 0.0 3820 576 ?  S Jan24 0:00 tail -F /mnt/services/APP_THREE/var/log/celeryd.err 
flume-ng 27945 0.0 0.0 3812 564 ?  S Jan24 0:00 tail -F /mnt/services/APP_THREE/var/log/celerybeat.err 
flume-ng 27951 0.0 0.0 3812 564 ?  S Jan24 0:00 tail -F /mnt/services/MY_APP/var/log/celeryd.log 
flume-ng 27967 0.0 0.0 3816 580 ?  S Jan24 0:00 tail -F /mnt/services/APP_THREE/var/log/celeryd.log 
flume-ng 27969 0.0 0.0 3820 528 ?  S Jan24 0:00 tail -F /mnt/services/MY_APP/var/log/celerybeat.log 
flume-ng 27970 0.0 0.0 3820 528 ?  S Jan24 0:00 tail -F /mnt/services/APP_FOUR/var/log/celeryd.err 
flume-ng 27974 0.0 0.0 3816 568 ?  S Jan24 0:00 tail -F /mnt/services/APP_THREE/var/log/celerybeat.log 
flume-ng 27977 0.0 0.0 3812 564 ?  S Jan24 0:00 tail -F /mnt/services/MY_APP/var/log/celeryd.err 
flume-ng 28050 0.0 0.0 3816 520 ?  S Jan24 0:00 tail -F /mnt/services/APP_TWO/var/log/celeryd.log 
508  9256 0.0 0.3 197348 29076 ?  Sl Feb08 0:04 python2.7 /mnt/services/APP_THREE/bin/celery worker -B -Q APP_THREE --loglevel=INFO --autoreload -A APP_THREE.queue.tasks -E 
508  9264 0.0 0.3 200584 27656 ?  S Feb08 0:00 python2.7 /mnt/services/APP_THREE/bin/celery worker -B -Q APP_THREE --loglevel=INFO --autoreload -A APP_THREE.queue.tasks -E 
508  9265 0.0 0.3 202092 28060 ?  S Feb08 0:48 python2.7 /mnt/services/APP_THREE/bin/celery worker -B -Q APP_THREE --loglevel=INFO --autoreload -A APP_THREE.queue.tasks -E 
508  9266 0.0 0.3 206420 29880 ?  S Feb08 0:46 python2.7 /mnt/services/APP_THREE/bin/celery worker -B -Q APP_THREE --loglevel=INFO --autoreload -A APP_THREE.queue.tasks -E 
APP_FOUR 14512 0.0 0.3 153144 23736 ?  Sl 18:23 0:00 python2.7 /mnt/services/APP_FOUR/bin/celeryd --loglevel=INFO --autoreload -A APP_FOUR.queue.tasks -E -Q APP_FOUR 
APP_FOUR 14545 0.0 0.2 136212 19868 ?  S 18:23 0:00 python2.7 /mnt/services/APP_FOUR/bin/celeryd --loglevel=INFO --autoreload -A APP_FOUR.queue.tasks -E -Q APP_FOUR 
APP_FOUR 14547 0.0 0.2 136232 19872 ?  S 18:23 0:00 python2.7 /mnt/services/APP_FOUR/bin/celeryd --loglevel=INFO --autoreload -A APP_FOUR.queue.tasks -E -Q APP_FOUR 
507  23894 14.6 0.3 154644 25168 ?  Sl 19:29 2:08 [[email protected]:MainProcess] -active- (worker --beat --schedule=/mnt/services/MY_APP/var/lib/celerybeat --loglevel=INFO --autoreload --app=MY_APP.queue.tasks --events --queues=MY_APP)   
507  23901 0.0 0.2 147852 22640 ?  S 19:29 0:00 [celerybeat]                                                   
507  23902 6.1 0.3 143500 26312 ?  S 19:29 0:53 [[email protected]:PoolWorker-2]                                               
507  23903 6.1 0.3 143660 26452 ?  S 19:29 0:54 [[email protected]:PoolWorker-3]                                               
507  25859 0.0 0.0 6040 676 pts/0 S+ 19:43 0:00 grep celery 

답변

0

또한,이 --schedule 매개 변수 비트의 한 인스턴스에 설정되지 않았 음되었을 수도 있지만, 다른 한편이었다. 또는 둘 모두의 redis 큐가 db 0을 사용하고있을 수있었습니다. 나는 수정 사항을 명확하게 찾지 못했지만 - schedule 매개 변수 하나가 현재 작동하고 있습니다.

0

나는 비트과 동일한 문제가 있는데, 잘못된 비트 데이터베이스 파일 사용 권한이 있음이 드러났습니다.

나는 플러그인 로컬 데이터베이스 파일을 볼륨으로 사용하여 도커 작성 설치를 사용했습니다.

내가 (고정 표시기에 사용자 지정 지역 및 루트) 다른 사용자의 로컬 및 고정 표시기에서 이길 달렸다.

일단 로컬에서 처음으로 뛰었 으면 2 도커 설치가 로컬 사용자가 소유 한 데이터베이스를 읽을 수 없습니다.

관련 문제