Después de emitir la señal TERM para el empleado de Apio dos veces (apagado cálido y apagado en frío) utilizando la interrupción del teclado Ctlr-C, el trabajador de Apio se colgó. No está consumiendo mensajes ni está ejecutando tareas (como se esperaba), pero tampoco se está cerrando.¿Por qué el apio no se cierra limpiamente?
Ejecuté strace
en los procesos de Apio para ver qué ocurre detrás de la escena. Aquí está la salida strace
en el PID del proceso principal apio
strace -p 27867
Process 27867 attached - interrupt to quit
futex(0xb966a78, FUTEX_WAIT, 0, NULL
Y aquí está lo que encontré haciendo strace
en los procesos secundarios:
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
......................................................
Sé que podría emitir una señal KILL para los procesos a Deshazte de ellos. Pero tengo curiosidad por saber qué es lo que realmente impide que se cierren estos procesos, y si es posible hacer algo al respecto.
pila de software: Python 2.6.2, apio 2.4.6, CentOS 5.0
UPDATE: El uso de la CPU se ha reducido a casi 0%. Estas tareas consumen bastante CPU, por lo que esto confirma que no hay tareas actualmente activas.
no hay tareas activas. Las tareas que se habían estado ejecutando en el momento de emitir la señal de parada se terminaron. La longitud de la cola sigue siendo la misma. No se está enviando nada a los registros. Pero los procesos aún no están finalizando. Como dije, * puedo * emitir un KILL y deshacerme de ellos. Pero esto no será una solución efectiva. Para usar este software de manera confiable, necesito poder detenerlo (y comenzar) automáticamente con poca o ninguna intervención manual. – rubayeet
Una buena solución para esto es demonizar el apio. Supervisord es un excelente candidato. – hymloth
Estoy usando los scripts de inicio genéricos para demonizar a los trabajadores: https://github.com/ask/celery/blob/master/contrib/generic-init.d/celeryd – rubayeet