쉘 스크립트에서 파일을 잠그는 방법은 무엇입니까? [복사]

쉘 스크립트에서 파일을 잠그는 방법은 무엇입니까? [복사]

파일 잠금을 통해 두 개의 Bash 스크립트를 동기화하고 싶습니다. 어떻게 해야 하나요? Zsh에는 zsystem flock호출이 있지만 Bash에서도 작동하는 좀 더 "껍질 같은" 접근 방식이 있습니까?

답변1

파일 자체를 잠그는 것 외에도 잠금 역할을 하는 파일(잠금 파일)을 만들 수 있습니다. procmail이를 달성하기 위한 다음과 같은 많은 유틸리티가 있습니다.lockfile, 데비안에서 이 liblockfile-bin패키지는 dotlockfile대부분의 시스템에서 사용할 수 있을 만큼 일반적입니다.

그러나 기본적으로 다음과 같이 요약됩니다.

tempfile=$(mktemp ./lock.XXXX)
lockfile=./lockfile
if ln $tempfile $lockfile ; then
    echo got it
    # do something
    rm $lockfile # after you're done
else 
    echo did not succeed
fi
rm $tempfile

ln이와 달리 echo > file대상이 이미 존재하는 경우 대상을 삭제하지 않고 대신 확인할 수 있는 오류가 발생합니다.

노트:잠그고 싶다면네트워크 파일 시스템, 이 목적을 위해 만들어진 일부 도구를 사용합니다. NFS를 통한 동시 파일 액세스의 의미는... 아무리 말해도 흥미롭습니다.

관련 정보