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'