Sidekiq na operação: iniciando, parando e matando processos
Série Sidekiq — parte 1 de 4
- Você está aqui — Infra: iniciando, parando, matando
- Diagnóstico pelo console
- Manipulação em massa de jobs e processos
- Hacks de UI no painel
Antes de mergulhar nas filas e jobs, é bom ter o básico do ciclo de vida do processo Sidekiq sólido — porque a maior parte dos incidentes começa com “como derrubo isso sem perder jobs”.
Documentação da API: github.com/mperham/sidekiq/wiki/API.
Iniciando o Sidekiq
1
bundle exec sidekiq -d -L log/sidekiq.log -C config/sidekiq.yml
-ddaemoniza (libera o terminal).-L log/sidekiq.logaponta o arquivo de log.-C config/sidekiq.ymlaponta o arquivo de configuração (filas, concorrência, retries).
Em produção esse comando geralmente vive num systemd unit ou no Procfile do app, mas pra testes locais e VPS sem orquestrador é perfeito.
Parando pelo controlador do Rails (recomendado)
1
2
3
ps -ef | grep sidekiq | grep busy | grep -v grep | awk '{print $2}' > tmp/sidekiq.pid
cat tmp/sidekiq.pid
bundle exec sidekiqctl stop tmp/sidekiq.pid
sidekiqctl stop espera os jobs em execução terminarem (até o timeout configurado) antes de matar o processo. É a forma educada — preserva idempotência se algum worker estiver no meio de uma operação não-atômica.
O pipe ps -ef | grep busy filtra pelo processo que está realmente trabalhando (não a master), e o awk '{print $2}' extrai só o PID.
Parando pelo SO (último recurso)
1
2
ps -ef | grep sidekiq | grep busy | grep -v grep | awk '{print $2}'
kill -9 $(ps -ef | grep sidekiq | grep busy | grep -v grep | awk '{print $2}')
kill -9 é o botão vermelho: o processo morre na hora, sem chance de terminar o que estava fazendo. Job em execução vira retry, então só faça quando:
- O
sidekiqctl stoptravou e não responde - O processo virou zumbi e está consumindo memória sem fazer nada
- Você está numa situação de incêndio onde derrubar é mais importante que preservar idempotência
Se você se pega usando kill -9 com frequência, vale investigar por que o stop está demorando — geralmente é job que não respeita o timeout ou conexão de banco travada.
Próximo da série
Diagnóstico de Sidekiq pelo console — Sidekiq::Stats, agrupamento por classe, listagem de processos e workers.