인크론 작업에서 한 번에 하나의 항목을 허용하시겠습니까?

인크론 작업에서 한 번에 하나의 항목을 허용하시겠습니까?

모니터링하고 싶은 디렉토리가 있습니다. 업데이트 후 incron을 통해 몇 가지 명령을 실행했습니다. 이 디렉터리에 여러 파일을 복사할 때 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

관련 정보