병렬로 실행되는 두 개의 쉘 스크립트가 있지만 한 번에 하나씩도 있습니다. 두 스크립트 모두 초기 설정 단계를 사용하므로 시간이 걸리고 동시에 실행할 수 없습니다.
나머지의 병렬 실행을 허용하기 위해 다음을 사용하여 제어 흐름에서 설정 단계를 래핑합니다.flock
기반으로이 제안.
이것~인 것 같다잘 작동하지만 if-else 구문이 완전히 안전한지는 잘 모르겠습니다. 여기에 제가 놓친 숨겨진 문제가 있나요?
set -euxo pipefail
(
# Only run setup if we're the first to acquire the lock
if flock -x -n 200 ; then
# Time-consuming setup that can't be run in parallel
else
# Wait for the lock to be released and then continue, timeout on 600s
flock -x -w 600 200;
fi
) 200>/tmp/setup.lock
# Rest of the script that relies on setup being done