Sua pergunta não diz de onde $FILE
obtém seu valor, mas parece que cada invocação do script está realmente manipulando o mesmo $FILE
.
Se isso for verdade, então suas 4 invocações estão competindo umas com as outras e a falha que você vê é esperada. Como você realiza uma operação de leitura + modificação + substituição não atômica nesse arquivo e não usa a exclusão mútua para garantir que apenas um processo esteja em sua seção crítica por vez, uma das invocações do arquivo pode facilmente prejudicar outras modificações.
Você deve executar del_client_entry
em um bloqueio. Por exemplo:
(
flock 9
del_client_entry <parameters>
) 9>/my/lock/file