로그 출력을 기반으로 지속적으로 명령 실행

로그 출력을 기반으로 지속적으로 명령 실행

서비스를 하나씩 시작하는 스크립트를 작성했습니다. 각 서비스가 완료된 후 다음 명령을 실행하고 다음 명령을 제공한 것처럼 첫 번째 명령이 실행될 때까지 기다려야 합니다.

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부모 쉘이 죽을 때까지 기다리지 않도록 배경으로 보내집니다 . 다음 메시지가 기록될 때까지 프로세스가 잠시 중단됩니다.

관련 정보