나는 사용한다알람 시계 애플릿일을 하는 동안. 타이머가 끝나면 스크립트를 실행하게 합니다. 이 스크립트는 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초의 절전 시간보다 오래 걸리는 경우).
비슷한 게시물 몇 개를 온라인에서 검색한 결과 관련성이 있어 보이는 몇 가지 게시물을 찾았습니다.
이것들은 모두 동일한 기본 접근 방식을 따르는 것으로 보입니다. 즉, 원하는 조건이 충족될 때까지 루프를 사용하여 기다리는 것입니다.
고쳐 쓰다:프로세스가 시작되기를 기다리는 것만으로는 충분하지 않습니다. 이 경우 서비스가 제공될 때까지 기다려야 합니다. 다음 게시물을 확인해 보세요.