Executando o shell script parallelly e no background pula algumas operações

1
del_client.sh --delete client1 &
del_client.sh --delete client2 &
del_client.sh --delete client3 &
del_client.sh --delete client4 &

Quando executei os comandos acima em segundo plano, client1 não foi excluído.

del_client.sh

código que é chamado durante a operação acima:

del_client_entry()[

cat $FILE |grep -v ^"${entry}\." | grep -v ^"# ${entry} VT" > $FILE.del
        cp -p $FILE.del $FILE
}
    
por Gaurav KS 28.03.2016 / 12:37

1 resposta

4

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
    
por 28.03.2016 / 13:01