Bash 스크립트의 백그라운드 작업

Bash 스크립트의 백그라운드 작업

이벤트에 응답하는 "true일 때" bash 스크립트를 작성하려고 합니다. (이것은 git 푸시 알림을 위한 웹훅이지만 아직 관련성이 높지는 않습니다.)

차단하고 다음 콜백을 기다리고 빌드를 실행한 후 다시 차단할 수 있는데, 빌드 중간에 콜백을 받으면 놓치게 되므로 다음과 같이 해결하려고 했습니다.

# Build loop, run in the background (see "done &" at the bottom)
while true
do
    # If last build start is newer than last push do nothing.
    if [ last-build-start -nt last-push ]
    then
        echo "last-build-start newer than last-push. Doing nothing."
        sleep 3
        continue
    fi
    log "Build triggered $(date)"
    touch last-build-start
    ./build-all-branches.sh
    log "Done. Waiting for next trigger..."
done &

# Terminate above loop upon Ctrl+C
trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT

# Listen for HTTP requests, do nothing but touch last-push
# to trigger a build in the build loop above.
while true
do
    # Wait for hook to be called
    echo -e "HTTP/1.1 200 OK\n\n $(date)" \
        | nc -l 8787 -q 1 > /dev/null

    # Trigger new build
    echo "Triggered... touching last-push"
    touch last-push
done

내가 겪고 있는 문제는 빌드 루프가 항상 트리거되지 않는다는 것입니다. 실행 되지만 빌드 루프의 다른 인스턴스가 시작되어 빠르게 실행되는 touch last-push것과 같습니다 .touch last-build-start

위 코드에서 실수로 여러 빌드 루프를 시작했습니까? 스크립트에 또 다른 어리석은 실수가 있나요?

관련 정보