バックグラウンドでシェルスクリプトを並列に実行すると、特定のタスクはスキップされます。

バックグラウンドでシェルスクリプトを並列に実行すると、特定のタスクはスキップされます。
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

おすすめ記事