flock -x -w 5 ~/counter.txt 'COUNTER=$(cat ~/counter.txt); echo $((COUNTER + 1)) > ~/counter.txt'
Jak mam przekazać wiele poleceń, flock
jak w powyższym przykładzie?
O ile rozumiem, flock
bierze różne flagi (-x dla wyłączności, -w dla limitu czasu), następnie plik do zablokowania, a następnie polecenie do uruchomienia. Nie jestem pewien, w jaki sposób przekazałbym dwa polecenia do tej funkcji (ustaw zmienną z zawartością zablokowanego pliku, a następnie zwiększ ten plik).
Moim celem tutaj jest utworzenie nieco atomowego przyrostu dla pliku poprzez zablokowanie go za każdym razem, gdy skrypt próbuje uzyskać dostęp do counter.txt
pliku.
źródło
Lub możesz zablokować deskryptor pliku
Ma to również tę zaletę, że umożliwia bezpośrednie użycie zmiennej licznika, w przeciwieństwie do metod opartych na podpowłoce.
źródło
exec {counterfd}
? Sam w sobie Debian popełnia błędynot found
, ale zwraca 0 z przekierowaniem. Bardzo dziwne.flock
Narzędzie jest trochę trudne w użyciu, a strona man jest dość krótki. Strona podręcznika udostępnia trzy sposoby korzystania z tego narzędzia:flock [options] <file|directory> <command> [command args]
flock [options] <file|directory> -c <command>
flock [options] <file descriptor number>
Sposób, w jaki sformułowane jest to pytanie, zdecydowanie użyłbym trzeciej formy
flock
. Jeśli przejdziesz dalej na stronę podręcznika,flock
istnieje kilka przykładów, które pokazują dokładną składnię dla użycia trzeciego formularza:Dodałem
#!/bin/bash
.Z powodzeniem wykorzystałem tę formę
flock
.źródło