이벤트에 응답하는 "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
위 코드에서 실수로 여러 빌드 루프를 시작했습니까? 스크립트에 또 다른 어리석은 실수가 있나요?