Bash:スクリプトを続行する前に、プロセスが開始されていることを確認してください。

Bash:スクリプトを続行する前に、プロセスが開始されていることを確認してください。

私は使う目覚まし時計アプレット仕事をしている間。タイマーの終わりにスクリプトを実行させます。このスクリプトは、1)画面通知を発行し、2)オーディオクリップを再生します。

これデーモンに通知常に実行されるわけではありません。だから、実行していない場合は、画面の通知を渡す前に最初に開始したいと思います。

これを行うには、次のものがあります。

#!/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

問題は、最初の実行時に通知が表示されないことです。デーモンが正常に開始され、後続のスクリプト実行が期待どおりに実行されます。

sleep 0.5の呼び出し後に追加すると、notification-daemon最初の実行時に通知が表示されます。しかし、これはかなり粗雑なようです。

続行する前に通知デーモンが起動したことを確認する方法はありますか?

答え1

whileループを使用して、サービスが開始されるのを待つことができます。

#!/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

これは、デーモンが実行されるまで作業を続行しないことを保証します(たとえば、何らかの理由で0.5秒のスリープ時間より長くかかる場合など)。

同様の投稿のいくつかをオンラインで検索した結果、関連性があり、見えるいくつかの投稿が見つかりました。

これらはすべて同じ基本的なアプローチに従うようです。つまり、目的の条件が満たされるまでループを使用して待機します。

修正する:プロセスの開始を待つだけでは十分ではありません。この場合、サービスが提供されるまで待つ必要があります。次の投稿を確認してください。

関連情報