Identificar e Matar Workers Zumbis do Resque
Já aconteceu algumas vezes comigo de ter os workers do Resque exportados para o upstart do Ubuntu e precisar substituir por outros.
O problema é que ao excluir os arquivos de configuração de /etc/init
e colocar os dos workers novos, por algum motivo o Ubuntu se perde e não sobe o que deveria, mantendo os processos antigos. Se você mata os processos eles voltam.
Uma solução que encontrei para matar os processos zumbis é entrar no console da aplicação Rails, identificar os workers antigos (você pode fazer isso via comando ou vendo pela interface web do Resque mesmo) e removê-los.
Para ver os nomes dos workers rode:
Para remover um worker do Resque:
Caso tenha muitos e deseja matar todos, a junção dos dois também deve funcionar:
Agora é só reiniciar seu job no upstart, esperar ele subir e pronto.
Modo hard
Caso o procedimento acima não resolva, podemos fazer da seguinte forma:
Execute o comando netstat
com os parâmetros ntp
para procurar por conexões TCP que ainda estão estabelecidas na porta 6379 (porta padrão do redis)
Estamos interessados somente nas linhas em que ainda há conexões abertas (ESTABLISHED
), se quiser, pode aplicar mais um grep
com pipe para filtrar a saída:
Ficou fácil observar que o worker zumbi é o worker de PID 8223 (único worker resque que ainda está conectado mesmo quando todos deveriam estar desativados), para checar se isso é verdade você pode usar um ps aux
:
Um worker escutando as filas scraper
, mailer
e normal
que não está ligado a aplicação.
Agora é só matá-lo:
E reiniciar os workers.
Abraços.