
모니터링할 디렉토리가 있습니다. 업데이트되면 incron을 통해 일부 명령을 실행합니다. 이 디렉터리에 여러 파일이 복사되면 incron은 동시에 여러 명령을 실행합니다. 인크론의 한 작업이 실행 중일 때 두 번째 작업이 실행되지 않도록 하는 방법이 있습니까?. 나는 팔로우했다이 튜토리얼안내를 위해.
답변1
아니요, incron에는 잠금 기능이 내장되어 있지 않습니다. 작업이 동시에 실행되는 것을 방지하려면 작업 내에서 수행하십시오.
이전 작업이 완료될 때까지 작업을 지연하려면 잠금을 설정하세요. 당신은 사용할 수 있습니다flock
명령. 매뉴얼 페이지에 예제가 있습니다.
이전 작업이 완료되지 않은 경우 작업을 건너뛰려면 여전히 를 사용할 수 있지만 flock
시간 제한은 0입니다. 잠금을 얻을 수 없으면 종료하십시오. 이것은 경쟁 조건이 발생하기 쉽다는 점에 유의하십시오. 작업 #1이 파일 열거를 마친 직후에 잠금을 해제할 시간이 생기기 전에 새 파일이 복사될 수 있으며, 작업 #2에서는 잠금이 해제되었음을 확인할 수 있습니다. 여전히 보류되어 있으며 파일을 처리하지 않고 종료됩니다. 그 경주를 해결하는 쉬운 방법은 없습니다.
답변2
가장 간단한 솔루션 예: 1은 파일이 잠겨 있음(이전 스크립트가 이미 실행 중임)을 의미하고 0은 잠금 해제됨(실행 중인 프로세스가 없음)을 의미한다고 가정합니다.
그럼 코드는 이렇습니다
state=`cat /tmp/my_lck`
if [ "$state" -eq 1 ];then
echo "Already executing!!!"
exit
else
#Lock the file
echo 1 > /tmp/nws_lck
#Put you code here
#Unlock
echo 0 > /tmp/nws_lck
fi