Ich möchte mehrere Bash-Shell-Skripte parallel ausführen. Ich möchte jedoch Rennbedingungen vermeiden. Welche Unix-Befehle sind wirklich atomic, die ich für diesen Zweck verwenden könnte, und wie kann ich sie verwenden?
Akzeptierte Antwort:
Wenn lockfile
nicht auf Ihrem System installiert ist, dann mkdir
erledigt
die Arbeit:Es handelt sich um eine atomare Operation, die fehlschlägt, wenn das Verzeichnis
bereits existiert (solange Sie nicht den -p
hinzufügen Befehlszeilenschalter
).
create_lock_or_wait () {
path="$1"
wait_time="${2:-10}"
while true; do
if mkdir "${path}.lock.d"; then
break;
fi
sleep $wait_time
done
}
remove_lock () {
path="$1"
rmdir "${path}.lock.d"
}