백그라운드에서 쉘 스크립트를 병렬로 실행하면 특정 작업을 건너뜁니다.

백그라운드에서 쉘 스크립트를 병렬로 실행하면 특정 작업을 건너뜁니다.
del_client.sh --delete client1 &
del_client.sh --delete client2 &
del_client.sh --delete client3 &
del_client.sh --delete client4 &

위 명령을 백그라운드에서 실행해도 client1삭제되지 않습니다.

del_client.sh

위 작업 중에 호출되는 코드:

del_client_entry()[

cat $FILE |grep -v ^"${entry}\." | grep -v ^"# ${entry} VT" > $FILE.del
        cp -p $FILE.del $FILE
}

답변1

귀하의 질문에는 값을 어디서 얻을 수 있는지 명시되어 있지 않지만 $FILE스크립트의 각 호출이 실제로 동일한 $FILE.

이것이 사실이라면 4개의 호출이 서로 경쟁하고 있으며 보고 있는 실패가 예상됩니다. 이 파일에 대해 비원자적 읽기+수정+교체 작업을 수행하고 있고 한 번에 하나의 프로세스만 중요 섹션에 있도록 하기 위해 뮤텍스를 사용하지 않기 때문에 호출 중 하나가 다른 사람의 수정 사항을 파기하는 파일입니다.

잠금 상태에서 실행 해야 합니다 del_client_entry. 예를 들어:

(
    flock 9
    del_client_entry <parameters>
) 9>/my/lock/file

관련 정보