La ejecución del script de shell de forma paralela y en segundo plano omite alguna operación

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

Cuando ejecuté los commands de arriba en el background, client1 no fue eliminado.

 del_client.sh 

código que se llama durante la operación anterior:

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

Related of "La ejecución del script de shell de forma paralela y en segundo plano omite alguna operación"

Su pregunta no dice de dónde $FILE obtiene su valor, pero parece que cada invocación del script realmente está manipulando el mismo $FILE .

Si eso es cierto, entonces tus 4 invocaciones están compitiendo entre sí y se espera el fracaso que ves. Debido a que lleva a cabo una operación de lectura no atómica + modificar + replace en este file y no utiliza la exclusión mutua para asegurarse de que solo haya un process en su sección crítica a la vez, una de las invocaciones del file puede fácilmente las modificaciones de otro.

Debe ejecutar del_client_entry bajo un locking. Por ejemplo:

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