
cURL 요청을 하고 출력을 이라는 파일에 쓰는 bash 스크립트가 있습니다 resp.txt
. 여러 사용자가 스크립트를 실행하고 동시에 텍스트 파일을 편집하는 것에 대해 걱정하지 않고 파일에 쓸 수 있도록 배타적 잠금을 만들어야 합니다. 시간.
다음은 파일을 잠그고, 요청을 수행하고, 텍스트 파일에 쓸 것으로 예상되는 코드입니다.
(
flock -e 200
curl 'someurl' -H 'someHeader' > resp.txt
) 200>/home/user/ITS/resp.txt
이것이 이 문제를 해결하는 올바른 방법입니까? 내 실제 스크립트는 이보다 약간 길지만 flock
bash 스크립트에 구문을 추가하면 중단되는 것 같습니다.
누군가 이러한 파일 설명자가 어떻게 작동하는지 설명하고 파일을 올바르게 잠그고 있는지 알려주면 좋을 것입니다!
답변1
이렇게 하면 ( flock -e 200; ... ) 200> file
파일이 잘리기 때문에 이것은 잘못된 것입니다.file
앞으로독점 잠금 장치를 얻게 됩니다. 나는 당신이 이렇게 해야 한다고 생각합니다:
touch resp.txt
(
flock -e 200
curl 'someurl' -H 'someHeader' > resp.txt
) 200< resp.txt
읽기 전용으로 열린 파일에 잠금을 설정합니다.
노트.일부 쉘은 9보다 큰 파일 설명자를 지원하지 않습니다. 또한 하드 코딩된 파일 설명자가 사용되었을 수도 있습니다. 고급 셸(bash, ksh93, zsh)을 사용하면 다음을 수행할 수 있습니다.
touch resp.txt
(
unset foo
exec {foo}< resp.txt
flock -e $foo
curl 'someurl' -H 'someHeader' > resp.txt
)