2014-06-16 12 views
1

저는 셀러리를 사용하고 있습니다. 셀러리가 시작될 때 사용자 정의 프로세스를 만들고 있습니다.이 프로세스는 셀러리가 실행될 때마다 실행되어야합니다. 셀러리 작업자는이 프로세스를 자신의 작업에 사용합니다 (세부 사항은 필요하지 않음)."celeryd stop"이 작동하지 않습니다.

나는 명령 줄에서 셀러리를 실행하고 모든 괜찮 :

celery -A celery_jobs.tasks.app worker -B --loglevel=warning 

을하지만 셀러리를 디먼 화하는 celeryd를 사용하는 경우, 그것을 막을 수있는 방법은 없습니다. 명령 celeryd stop은 셀러리를 중지하려고 시도하지만 끝내지 않습니다.

두 경우 모두 프로세스 트리를 검사 할 때 차이점이 있습니다. 명령 줄에서 실행할 때 부모는 셀러리 프로세스 (샐러리 작업자가 하위 프로세스 인 주 프로세스)입니다. 부모 셀러리 프로세스를 중지 (중지)하면 모든 셀러리 작업자와 사용자 정의 프로세스가 중지됩니다.

그러나 celeryd으로 실행할 때, 내 사용자 지정 프로세스가 부모 /sbin/init있다 - 그리고 celeryd stop가 작동하지 않는 전화는 - 그것은 셀러리의 자식 프로세스 아니므로 뭔가를 기다리고 주요 셀러리 과정처럼 보인다, 또는 내 사용자 지정 프로세스를 중지 할 수 없습니다 .

프로세스에 대해 많이 알지 못하고 정보를 찾는 것이 쉽지 않습니다. 검색해야 할 항목을 모르기 때문에 모든 팁을 높이 평가합니다.

답변

0
을 중단하기로 결정

사용자 정의 프로세스가 풀 작업자 프로세스의 하위 프로세스가 아니라고 가정합니다.

저는 노동자를 대몬 화하기 위해 celeryd 대신 supervisord를 사용합니다. 다른 프로세스도 데몬 처리하는 데 사용할 수 있습니다. 사용자 지정 프로세스와 같은.

supervisord.conf에는 여러 섹션이있을 수 있습니다. 각 셀러리 작업자 노드에 하나, 사용자 정의 프로세스에 하나 이상.

감독자 프로세스 (-TERM 사용)를 종료하면 모든 작업자와 사용자 정의 프로세스가 종결 처리됩니다. -TERM을 사용하는 경우 사용자 정의 프로세스가이를 처리해야합니다.

+0

나는이 해결책을 더 깨끗하게 생각할 때이 대답을 받아 들였다. – misoK

1

나는 동일한 문제가있었습니다. 나는 빠른 솔루션이 필요했습니다, 그래서이 bash는 스크립트

#/bin/bash 

/etc/init.d/celeryd stop 
sleep 10 
export PIDS=`ps -ef | grep celery |grep -v 'grep' | awk '{print $2}'` 
for PID in $PIDS; do kill -9 $PID; done; 

프로세스가 10 초 후에 중지하지 않는 경우를 썼다, 그것은 오랜 시간에 스톱 후보, 그래서 내가 갑자기

+0

빨리 해결해 주셔서 감사합니다. 다른 해결책을 찾지 못할 경우 도움이 될 수 있습니다. – misoK