Por que tentar capturar um PID fazendo com que meu script de shell termine misteriosamente?

0

Estou usando o CentOS 7. Estou tentando capturar o "mestre PID" de um processo em uma variável de script. Este é o meu script

#!/bin/sh

set -e

PID="$APP_ROOT/shared/pids/puma.pid"
echo "before ..."
MASTER_PID='pgrep -f '^([^ ]*/)?puma ''
echo "after ..."
xxx

No entanto, a palavra "depois de ..." nunca é impressa. Há algo sobre essa linha

MASTER_PID='pgrep -f '^([^ ]*/)?puma ''

que está fazendo com que as coisas se comportem mal, especialmente se não houver nenhum processo do puma em execução. Alguém sabe uma maneira de reescrever o acima para que eu possa capturar meu PID mestre ou pelo menos permitir que a execução passe para a próxima linha se ela não existir?

    
por Dave 15.05.2018 / 03:43

2 respostas

1

Se você quiser manter o set -e , você precisa evitar que o pgrep falhe:

MASTER_PID='pgrep -f '^([^ ]*/)?puma ' || true'
    
por 15.05.2018 / 11:35
1

set -e Sair imediatamente se um comando sair com um status diferente de zero.

Como pgrep falha quando não há PID correspondente, você não pode executar a instrução echo "after" .

Acho que remover set -e deve resolver seu problema.

    
por 15.05.2018 / 06:27