![잠금 쉘 스크립트](https://linux55.com/image/24965/%EC%9E%A0%EA%B8%88%20%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8.png)
한 번에 하나의 복사본만 실행할 수 있도록 장기 실행 쉘 스크립트를 작성하고 싶습니다. 스크립트가 충돌하는 경우 충돌한 호출의 잠금으로 인해 스크립트에 대한 새 호출이 중단되지 않도록 하고 싶습니다.
예lockfile-*
유틸리티 세트올바른 것을 사용하고 있습니까? 스크립트에서 사용할 때 경쟁 조건이 발생할 수 있습니까?
--use-pid
매뉴얼 페이지에 언급된 5분 제한을 해제 하시겠습니까 ? 내 스크립트를 실행하는 데 훨씬 더 오랜 시간이 걸립니다.
저는 NFS나 이와 유사한 것이 없는 Amazon EC2에서 Ubuntu 10.10 인스턴스를 사용하고 있습니다.
답변1
잠금 생성은 명령 lockfile
이나 flock
시스템 호출을 통해 수행되거나 디렉터리 생성(무중단 작업)을 통해 수행될 수 있지만 두 번째 부분은 더 까다롭습니다.
잠금이 존재하는 경우 잠금이 아직 실행 중인 프로세스에 속하는지 확인하는 방법은 무엇입니까?
가장 일반적인 해결책은 프로세스의 PID를 잠금 파일에 넣는 것입니다.
잠금을 생성하기 전에 잠금 파일이 이미 존재하는지 확인해야 합니다. 그렇다면 PID가 잠금을 생성해야 하는 것과 유사한 실행 중인 프로세스와 일치하는지 확인하십시오. 그렇지 않은 경우 잠금을 삭제하고 다시 생성하십시오.