Estou usando o CentOS 7. Estou tentando escrever um script para iniciar e parar um processo puma, mas não consigo descobrir como obter o PID "mestre", se é que esse é o termo certo. No comando abaixo
[rails@server myproject_production]$ ps aux | grep puma
rails 15767 0.0 1.2 437904 13612 ? Sl 17:20 0:00 puma 3.11.4 (tcp://0.0.0.0:3000,unix:///home/rails/myproject_production/shared/sockets/puma.sock) [myproject_production]
rails 15779 0.6 7.6 1061248 80688 ? Sl 17:20 0:05 puma: cluster worker 1: 15767 [myproject_production]
rails 15781 0.6 7.7 1061248 80876 ? Sl 17:20 0:05 puma: cluster worker 2: 15767 [myproject_production]
rails 15785 0.6 7.4 1061964 78488 ? Sl 17:20 0:05 puma: cluster worker 3: 15767 [myproject_production]
rails 15880 0.7 7.4 1059612 78592 ? Sl 17:22 0:05 puma: cluster worker 0: 15767 [myproject_production]
rails 17106 0.0 0.1 112612 1064 pts/0 S+ 17:33 0:00 grep --color=auto puma
O PID mestre é "15767". Se eu matar isso, todos os outros processos do puma morrerão. Como faço para escrever um comando para obter taht em uma variável de script?
Use
pgrep
em vez de filtrar a saída deps
. Acho que, no seu caso,pgrep -f '^([^ ]*/)?puma '
corresponderá ao processo certo, mas experimente um pouco para ter certeza de que está obtendo o que deseja e nada mais.Quando estiver satisfeito com a
pgrep
localização do processo que deseja eliminar, substituapgrep
porpkill
.Você poderia fazer isso usando ps da seguinte maneira:
ps -ef | grep puma | grep -v grep | grep -v cluster | awk '{print $2}' | xargs kill
Explicação:
ps : fornece as informações do processo
grep : filtra a string fornecida
grep -v : remove aquele com registros correspondentes
awk '{print $2}' : retorna o segundo item da linha
xargs : converte a entrada fornecida em argumentos para o comando que o segue