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