Descobri porque redirecionar a saída do comando ps
para um arquivo. Se eu executar o script a partir de um launcher, o grep encontrará o próprio script (que tem "serviio" em seu nome) e, portanto, não executará o código dentro de "if".
Eu o consertei fazendo o que o grep procura mais específico.
A causa principal parece ser que, se o script for executado diretamente de um terminal, ele não aparecerá como um processo, mas se for executado a partir de um ativador, o interpretador (peixe, nesse caso) aparecerá com o script como um parâmetro .