서비스를 하나씩 시작하는 스크립트를 작성했습니다. 각 서비스가 완료된 후 다음 명령을 실행하고 다음 명령을 제공한 것처럼 첫 번째 명령이 실행될 때까지 기다려야 합니다.
wait_for "Server started in RUNNING mode"
wait_for "socket listener started on port"
하지만 이 논리를 사용하지 않습니다.
wait_for() {
res=0
while [[ ! $res -gt 0 ]]
do
res=$(tail -5 "$START_LOG" | fgrep -c "$1")
sleep 5
done
}
답변1
wait_for() {
( tail -n5 -F "$START_LOG" 2>/dev/null & ) | fgrep -l "$1" >/dev/null
}
-F
심지어 로그 회전도 따른다는 것을 의미합니다.
&
tail
부모 쉘이 죽을 때까지 기다리지 않도록 배경으로 보내집니다 . 다음 메시지가 기록될 때까지 프로세스가 잠시 중단됩니다.