O problema em seu script é que (com o shell que você está usando) em um pipeline, cada comando é executado em um subshell separado e nenhum de seus status é propagado para o processo pai. Então, depois de command1 | command2
, $?
é sempre 0.
Mesmo que você o tenha corrigido, seu script não é muito confiável: ele corresponderá a processos com um nome que contenha seu processo como substring. O Linux fornece o comando pidof
que faz exatamente o que você está tentando fazer.
No entanto, isso ainda não é ideal, porque pode haver outro processo com o mesmo nome. Seria melhor usar um supervisor de serviço adequado, como start-stop-daemon
do Debian / Ubuntu, ou um serviço iniciante. lockfile
(de procmail), mencionado por Wrikken, também é uma possibilidade.