매개변수가 있는 bash 스크립트가 하나의 인스턴스만 실행하는지 확인하는 방법은 무엇입니까?

매개변수가 있는 bash 스크립트가 하나의 인스턴스만 실행하는지 확인하는 방법은 무엇입니까?

하나 있으면 deployment.sh환경과 릴리스 버전이라는 두 가지 매개변수를 사용합니다.

deployment.sh uat release1
deployment.sh prod release1

언제든지 하고 싶습니다. deployment.sh동일한 환경과 릴리스 버전을 사용하면 싱글톤으로 실행할 수 있습니다. 그러나 동시에 실행할 deployment.sh uat release1deployment.sh prod release1있습니다.

이를 수행하는 방법. 감사해요

답변1

이를 달성하는 한 가지 방법은 여러 프로세스에서 하나의 프로세스만 선택하는 데 명시적으로 사용되는 파일 잠금입니다. 바라보다 man flock:

#! /bin/bash

category="$1"
if [ 'uat' != "$category" ] && [ 'prod' != "$category" ]; then
    exit 2
fi

(
    flock -n 9 || exit 1
    # ... commands executed under lock ...
) 9>/var/lock/"$category"

관련 정보