Está falhando porque você executa ps u
. De man ps
:
u Exibe o formato orientado ao usuário.
Isso significa que ps
listará apenas processos de propriedade do usuário atual. Quando você executa o script manualmente, esse usuário é você para que seu processo seja listado corretamente.
(Como @Gilles apontou muito corretamente, o uso de -A
fará com que todos os processos sejam impressos de modo que a explicação esteja errada. pgrep
ainda é melhor).
De qualquer forma, uma maneira melhor de fazer isso seria usar pgrep
:
pgrep, pkill - look up or signal processes based on
name and other attributes
Alterar
w='ps u -A | grep -P ".+Sl.+/usr/local/MySource/endpoint" -c'
para
w='pgrep -c endpoint'