여러 인스턴스에서 실행되는 셸 스크립트가 있습니다. 한 인스턴스가 파일에 액세스하여 작업을 수행하는 경우 다른 인스턴스가 동일한 파일에 액세스하여 데이터가 손상되지 않도록 하려면 어떻게 해야 합니까?
내 질문은 병렬 실행 제어에 관한 것이 아니라 파일 잠금 또는 표시 메커니즘을 다루는 것입니다.
계속 진행하기 위해 몇 가지 조언을 구합니다.
답변1
Linux는 일반적으로 Windows와 달리 잠금을 수행하지 않습니다. 여기에는 많은 장점이 있지만 파일을 잠가야 하는 경우에는 여러 가지 옵션이 있습니다. 나는 추천한다
그룹: 열린 파일에 권고 잠금 적용 또는 제거.
이 유틸리티는 쉘 스크립트 내에서 또는 명령줄에서 클러스터(2) 잠금을 관리합니다.
단일 명령(또는 전체 스크립트)의 경우 다음을 사용할 수 있습니다.
flock --exclusive /var/lock/mylockfile -c command
잠금 상태에서 스크립트에서 더 많은 명령을 실행하려면 다음을 사용하십시오.
#!/bin/bash
....
(
flock --nonblock 200 || exit 1
# ... commands executed under lock ...
) 200>/var/lock/mylockfile
flock
서브셸 내 호출 이후의 모든 작업은 현재 를 보유하는 다른 프로세스가 없는 경우에만 수행됩니다 . 서브쉘이 종료되면 잠금이 자동으로 해제됩니다.(...)
flock
/var/lock/mylockfile
flock
파일 잠금이 제거될 때까지 기다릴 수도 있습니다(기본값). 이 경우 이 --nonblock
옵션을 사용하지 마십시오. flock
잠금을 성공적으로 획득할 수 없으면 실패하게 됩니다.