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つの呼び出しが互いに競合しており、見ている失敗が予想されます。このファイルに対して非原子読み取り+修正+交換操作を実行していて、一度に1つのプロセスのみが重要セクションになるようにミューテックスを使用しないため、呼び出しの1つが他の人の修正を破棄するファイルです。
ロック状態で実行する必要がありますdel_client_entry
。たとえば、
(
flock 9
del_client_entry <parameters>
) 9>/my/lock/file