Bash: Verifique se o processo foi iniciado antes de continuar o script

3

Eu uso o miniaplicativo do despertador ao fazer o trabalho. Quando o cronômetro termina, eu executo um script. O script faz duas coisas: 1) Dê uma notificação na tela e 2) Reproduza um clipe de áudio.

O daemon de notificação nem sempre está em execução. Então, se não estiver rodando, quero iniciá-lo antes de tentar passar a notificação na tela.

Para isso, tenho o seguinte:

#!/bin/sh

if ! pgrep -f "notification-daemon" > /dev/null ;
    then
    /usr/lib/notification-daemon/notification-daemon &
fi

notify-send "Take 5"
aplay /home/Me/Music/brubek-clip.wav

O problema é que, na primeira execução, a notificação não aparece. O daemon foi iniciado com sucesso e execuções subseqüentes da função de script conforme o esperado.

Quando coloco um sleep 0.5 após a chamada para o notification-daemon , a notificação aparece na primeira execução. Mas isso parece bastante cru.

Existe uma maneira de verificar se o daemon de notificação foi iniciado antes de continuar?

    
por Lorem Ipsum 10.12.2017 / 16:26

1 resposta

1

Você pode tentar usar um loop while para aguardar o lançamento do serviço:

#!/bin/sh

# If the notification daemon isn't running then launch it
if ! pgrep -f "notification-daemon" > /dev/null; then
    /usr/lib/notification-daemon/notification-daemon &
fi

# Wait for the notification daemon to finish launching
while ! pgrep -f "notification-daemon" > /dev/null; do

    # Set optional delay
    sleep 0.1

done

# Play awesome song (do-doop da-doop doop-doop-doop...)
notify-send "Take 5"
aplay /home/Me/Music/brubek-clip.wav

Isso deve garantir que você não continue até que o daemon esteja em execução (por exemplo, se, por algum motivo, ele demorar mais do que seu sono de 0,5 segundos).

Eu fiz um pouco de pesquisa na web para postagens semelhantes e encontrei algumas que parecem relevantes:

Todos parecem seguir a mesma abordagem básica - use um loop para esperar até que a condição desejada seja atendida.

UPDATE: Acontece que esperar que o processo comece não é suficiente. Nesse caso, você precisa aguardar o serviço ficar disponível. Você pode querer olhar para os seguintes posts:

por 10.12.2017 / 17:47

Tags