Bash에서 파일을 안전하게 생성하는 방법

Bash에서 파일을 안전하게 생성하는 방법

스크립트가 동시에 실행되는 것을 방지하기 위해 임시 파일을 플래그로 생성하는 스크립트가 있습니다. 현재는 를 사용합니다 tempfile.

if ! tempfile -n /tmp/updating > /dev/null; then
    echo 'Another synchronization is currently running' >&2
    exit 1
fi

이 프로그램은 이제 더 이상 사용되지 않으며 사용하는 것이 tempfile권장되지만 유사한 옵션이 없는 것 같습니다 .mktempmktemp-n

우분투 21.04를 사용하고 있습니다.

그렇다면 플래그 파일을 안전하게 생성하려면 어떻게 해야 할까요?

답변1

누군가 댓글에 '무리'를 제안했다가 삭제했습니다. Flock을 사용하면 요청된 질문에 정확하게 대답할 수는 없지만(파일이 안전하게 생성되지 않음) 내 요구 사항에는 충분합니다(잠금으로 인해 스크립트의 중요한 부분이 동시에 여러 번 실행되는 것을 방지할 수 있으므로).

위의 코드는 다음과 같이 변경되었습니다. 이제 파일의 파일 설명자를 연 /tmp/updating다음 열린 파일 설명자를 잠급니다.

exec 4<>/tmp/updating
if ! flock --nonblock --exclusive 4; then
    echo 'Another synchronization is currently running' >&2
    exit 1
fi

잠금이 해제되는 스크립트의 끝에는 rm /tmp/updating스크립트가 종료될 때 무리가 자동으로 해제되므로 더 이상 이 작업을 수행할 필요가 없습니다.

매뉴얼 페이지무리(1)다양한 시나리오에서 사용되는 몇 가지 예가 있는데, 저는 마지막 예를 사용했습니다.

관련 정보