![클러스터 잠금 파일만 보면 프로세스에서 명령이 실행되고 있는지 알 수 있나요?](https://linux55.com/image/141318/%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0%20%EC%9E%A0%EA%B8%88%20%ED%8C%8C%EC%9D%BC%EB%A7%8C%20%EB%B3%B4%EB%A9%B4%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%97%90%EC%84%9C%20%EB%AA%85%EB%A0%B9%EC%9D%B4%20%EC%8B%A4%ED%96%89%EB%90%98%EA%B3%A0%20%EC%9E%88%EB%8A%94%EC%A7%80%20%EC%95%8C%20%EC%88%98%20%EC%9E%88%EB%82%98%EC%9A%94%3F.png)
예유틸리티 리눅스flock
flock()
Linux C API를 기반으로 구현되었나요?
잠금 파일만 보면 프로세스에서 명령이 실행되고 있는지 알 수 있나요? 데몬화된 명령 flock
실행이 완료되면 잠금 파일이 변경되지 않는 것 같습니다. 실행 중과 완료 후의 모습은 다음과 같습니다.
$ ls -l ../sleep.flock.file
-rw-rw-r-- 1 t t 0 Oct 30 14:01 ../sleep.flock.file
$ ls -l ../sleep.flock.file
-rw-rw-r-- 1 t t 0 Oct 30 14:01 ../sleep.flock.file
감사해요.
답변1
예. 에 명확하게 명시되어 있음man 1 flock
이 flock
명령은 flock()
및man 2 flock
주석 섹션에는 이것이 flock()
Linux 커널 2.0부터 시작하는 시스템 호출을 통해 구현된다고 나와 있습니다.
답변2
$ flock -xn /home/vagrant/forever.lck -c /var/tmp/forever.sh
위의 클러스터 명령은 /home/vagrant/forever.lck 파일을 엽니다.배타적(-x) 파일 잠금그리고 지정된 명령(-c)을 실행합니다. [forever.sh는 sleep 25d 명령을 사용하여 완료하는 데 25일이 걸립니다.]
두 번째 인스턴스를 실행하면 Flock은 독점 파일 잠금이 이미 존재한다는 것을 인식합니다.
$ flock -xn /home/vagrant/forever.lck -c /var/tmp/forever.sh
$ echo $?
1
Flock이 파일을 잠글 수 없고 -n(비차단) 플래그로 실행되면 Flock 명령은 오류가 발생했음을 나타내는 종료 코드와 함께 자동으로 종료됩니다.
Flock의 유용한 점은 원래 프로세스가 완료될 때까지 파일 잠금이 그대로 유지되며, 이 시점에서 Flock이 파일 잠금을 해제한다는 것입니다. 이는 프로세스가 성공적으로 완료되거나 실패하든 마찬가지입니다.
자물쇠는 여기서 중요한 것이며 눈에 보이지 않습니다 ls
.