我用闹钟小程序做工作时。当计时器结束时,我让它运行一个脚本。该脚本执行两件事: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
在对 的调用之后添加 anotification-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 秒的睡眠时间)。
我在网上搜索了一些类似的帖子,发现了一些似乎相关的帖子:
这些似乎都遵循相同的基本方法 - 使用循环来等待,直到满足所需的条件。
更新:事实证明,等待进程启动是不够的。在这种情况下,您需要等待该服务可用。您可能想查看以下帖子: