私は使う目覚まし時計アプレット仕事をしている間。タイマーの終わりにスクリプトを実行させます。このスクリプトは、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秒のスリープ時間より長くかかる場合など)。
同様の投稿のいくつかをオンラインで検索した結果、関連性があり、見えるいくつかの投稿が見つかりました。
これらはすべて同じ基本的なアプローチに従うようです。つまり、目的の条件が満たされるまでループを使用して待機します。
修正する:プロセスの開始を待つだけでは十分ではありません。この場合、サービスが提供されるまで待つ必要があります。次の投稿を確認してください。