Ctlr-C 키보드 인터럽트를 사용하여 셀 램프 작업자에게 TERM 신호를 두 번 (Warm shutdown 및 콜드 셧다운) 실행 한 후 셀러리 작업자가 막 중단되었습니다. 그것은 (예상대로) 메시지 나 실행 태스크를 소비하지 않지만 종료하지는 않습니다.셀러 리가 깔끔하게 종료되지 않는 이유는 무엇입니까?
셀러리 프로세스에서 strace
을 실행하여 장면 뒤에서 진행되는 것을 확인했습니다.
strace -p 27874
Process 27874 attached - interrupt to quit
select(4, [3], NULL, NULL, {0, 562000}) = 0 (Timeout)
futex(0x871a808, FUTEX_WAKE, 1) = 0
select(4, [3], NULL, NULL, {1, 0}) = 0 (Timeout)
futex(0x871a808, FUTEX_WAKE, 1) = 0
......................................................
내가하는 과정에 KILL 신호를 발행 할 수 있습니다 알고 다음은 셀러리 주 과정 여기
strace -p 27867
Process 27867 attached - interrupt to quit
futex(0xb966a78, FUTEX_WAIT, 0, NULL
와의 PID에 strace
출력은 내가 자식 프로세스에 strace
하고 무엇을 발견입니다 그들을 제거. 그러나 실제로 이러한 프로세스가 종료되는 것을 막는 것이 무엇인지, 그리고 그것에 대해 무언가를 할 수 있는지 궁금합니다.
소프트웨어 스택 : 파이썬 2.6.2, 셀러리 2.4.6, CentOS는 5.0
업데이트 : CPU 사용량이 거의 0 %까지입니다. 이러한 작업은 CPU를 많이 사용하므로 현재 활성화 된 작업이 없음을 확인합니다. docs에서
활성 작업이 없습니다. 정지 신호를 발행 할 때 실행 중이던 작업이 완료되었습니다. 대기열 길이는 동일하게 유지됩니다. 로그에 아무 것도 출력되지 않습니다. 그러나 프로세스는 여전히 종료되지 않습니다. 내가 말했듯이, 나는 * 킬 *을해서 그들을 없앨 수 있습니다. 그러나 이것은 효과적인 해결책이 아닙니다. 이 소프트웨어를 안정적으로 사용하려면 수동 개입없이 자동으로 중지 (시작) 할 수 있어야합니다. – rubayeet
좋은 해결책은 샐러리를 데몬 화하는 것입니다. Supervisord는 훌륭한 후보자입니다. – hymloth
저는 노동자들을 대몬 화하기 위해 일반 init 스크립트를 사용하고 있습니다 : https://github.com/ask/celery/blob/master/contrib/generic-init.d/celeryd – rubayeet