Chci paralelně spouštět více skriptů prostředí Bash. Chci se však vyhnout závodním podmínkám. Jaké příkazy Unixu jsou skutečně atomové, které bych mohl k tomuto účelu použít, a jak je mohu použít?
Přijatá odpověď:
Pokud lockfile
není ve vašem systému nainstalován, pak mkdir
udělá
práci:je to atomická operace a selže, pokud adresář
již existuje (pokud nepřidáte -p
přepínač příkazového řádku).
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"
}