NAZWA¶
flock - zarządza blokadami ze skryptów
powłoki
SKŁADNIA¶
flock [opcje] plik|katalog polecenie
[argumenty]
flock [opcje] plik|katalog -c
polecenie
flock [opcje] numer
OPIS¶
Program zarządza blokami flock(2) z poziomu
skryptów powłoki lub z wiersza poleceń.
Pierwsza i druga z powyższych postaci wywołania
wiąże blokadę z wykonaniem polecenia, w podobny
sposób do su(1) lub newgrp(1). Blokowany jest podany
plik lub katalog, który jest tworzony (przy
odpowiednich uprawnieniach), jeśli jeszcze nie istniał.
Domyślnie, jeśli blokada nie może być od razu
pozyskana, flock poczeka, aż stanie się
dostępna.
Trzecia postać używa otwartego pliku
określonego numerem deskryptora pliku. Przykłady podane
poniżej wskazują na potencjalne zastosowania.
OPCJE¶
-c, --command polecenie
Przekazuje powłoce pojedyncze polecenie,
bez argumentów, używając opcji -c.
-E, --conflict-exit-code liczba
Status zakończenia, używany gdy stosowana
jest opcja -n i istnieje sprzeczna blokada, albo gdy stosowana jest
opcja -w i osiągnie się czas przeterminowania.
Domyślną wartością jest 1. Liczba
musi być z zakresu od 0 do 255.
-F, --no-fork
Nie rozgałęzia się przed wykonaniem
polecenia. Przy wykonaniu, proces flock jest zastępowany
poleceniem, które kontynuuje utrzymywanie blokady. Opcja ta jest
niekompatybilna z --close, ponieważ wówczas nie
istniałoby nic, co mogłoby utrzymywać
blokadę.
-e, -x, --exclusive
Uzyskuje blokadę na
wyłączność, czasem określaną jako
blokadę zapisu. Tak jest domyślnie.
-n, --nb, --nonblock
Zawodzi zamiast czekać, gdy nie można od
razu uzyskać blokady. Zob. opcję -E, aby poznać
używany status zakończenia.
-o, --close
Zamyka deskryptor pliku na którym utrzymywana jest
blokada, przed wykonaniem polecenia. Jest to przydatne, gdy
polecenie tworzy proces potomny, który nie powinien
utrzymywać blokady.
-s, --shared
Uzyskuje blokadę
współdzieloną, czasem określaną jako
blokadę odczytu.
-u, --unlock
Porzuca blokadę. Nie jest to zwykle wymagane,
ponieważ blokada jest automatycznie porzucana przy zamykaniu pliku.
Opcja może być wymagana w szczególnych przypadkach, na
przykład gdy rozgraniczona grupa poleceń mogła
zostać rozgałęziona w proces tła, który nie
powinien utrzymywać blokady.
-w, --wait, --timeout sekundy
Zawodzi, gdy blokady nie uda się pozyskać w
czasie sekund. Dozwolona jest wartość w postaci
ułamka dziesiętnego. Opcja -E określa użyty
w takim przypadku status zakończenia. Zerowa wartość
sekund jest interpretowana jako podanie opcji --nonblock.
--fcntl
Zamiast
flock(2), nakłada blokadę opisu
otwartego pliku
fcntl(2) (tzn. korzystając z poleceń F_OFD_SETLK
(nieblokujące) lub F_OFD_SETLKW (blokujące)). Blokady te
są niezależne od nałożonych za pomocą
flock(2), lecz w przeciwieństwie do tradycyjnych blokad fcntl() POSIX
(F_SETLK, F_SETLKW), mają zachowanie odpowiadające blokadom
flock(2).
Dostępne tylko w wersjach jądra >= 3.15.
--verbose
Zgłasza jak długo zajęło
pozyskanie blokady lub dlaczego nie udało się tego
zrobić.
-h, --help
Wyświetla ten tekst i wychodzi.
-V, --version
Wyświetla wersję i wychodzi.
STATUS ZAKOŃCZENIA¶
Polecenie korzysta z wartości statusu zakończenia z
<sysexits.h> we wszystkich przypadkach, z wyjątkiem podania
opcji -n lub -w, zgłaszających niepowodzenia w
pozyskaniu blokady ze statusem zakończenia podanym opcją
-E lub z domyślną wartością 1. Status
zakończenia określony przez -E musi
mieścić się w zakresie 0 do 255.
Przy korzystaniu z wariantu polecenie, jeśli
wykonanie polecenia potomnego powiodło się, statusem
zakończenia będzie status polecenia potomnego.
UWAGI¶
flock nie wykrywa zakleszczeń. Więcej
szczegółów w podręczniku flock(2).
Niektóre systemy plików (np. NFS i CIFS) mają
ograniczoną implementację flock(2) i flock może
zawsze zawieść. Więcej szczegółów
w podręcznikach flock(2), nfs(5) oraz
mount.cifs(8). W zależności od opcji montowania, flock
może na nich zawsze zawodzić.
PRZYKŁADY¶
Proszę zwrócić uwagę, że
"shell> " w poniższych przykładach jest znakiem
zachęty wiersza poleceń.
shell1> flock /tmp -c cat; shell2> flock -w .007 /tmp -c
echo; /bin/echo $?
Ustawia blokadę na
wyłączność na katalogu /tmp, zatem drugie
polecenie zawiedzie.
shell1> flock -s /tmp -c cat; shell2> flock -s -w .007 /tmp
-c echo; /bin/echo $?
Ustawia blokadę współdzieloną
na katalogu /tmp, zatem drugie polecenie nie zawiedzie. Proszę
zauważyć, że próba uzyskania blokady na
wyłączność drugim poleceniem zawiedzie.
shell> flock -x lokalny-plik-blokady echo 'a b c'
Uzyskuje blokadę na
wyłączność "lokalny-plik-blokady" przed
wykonaniem echo z argumentem 'a b c'.
(; flock -n 9 || exit 1; # ... polecenia wykonane pod
blokadą ...; ) 9>/var/lock/mojplikblokady
Postać ta jest wygodna w skryptach powłoki.
Tryb, z którego korzysta się do otwarcia pliku nie ma znaczenia
dla flock; korzystanie z > lub >> pozwala na
utworzenie pliku blokady, jeśli jeszcze nie istnieje, jednak potrzebne
jest do tego uprawnienie do zapisu. Użycie < wymaga, aby plik
już istniał, ale wymaga jest wówczas tylko uprawnienie do
odczytu.
[ "${FLOCKER}" != "$0" ] && exec env
FLOCKER="$0" flock -en "$0" "$0"
"$@" || :
Przydatny kod szablonowy do skryptów
powłoki. Należy go umieścić na początku
skryptu powłoki, który ma być objęty
blokadą; zablokuje się on automatycznie przy pierwszym
uruchomieniu. Jeśli zmienna środowiskowa $FLOCKER nie
jest ustawiona, gdy skrypt powłoki zostanie uruchomiony, kod wykonuje
flock oraz uzyskuje nieblokującą blokada na
wyłączność (używając samego skryptu
jako pliku blokady) przed ponownym wykonaniem się z prawidłowymi
argumentami. Ustawia również zmienną
środowiskową FLOCKER na prawidłową
wartość, dzięki czemu polecenie nie będzie
mogło być wykonane ponownie.
shell> exec 4<>/var/lock/mojplikblokady; shell> flock
-n 4
Postać przydatna do blokowania pliku bez tworzenia
podprocesu. Powłoka otwiera plik blokady do odczytu i zapisu jako
deskryptor pliku 4, a następnie używa flock do
zablokowania deskryptora.
AUTORZY¶
H. Peter Anvin <hpa@zytor.com>
PRAWA AUTORSKIE¶
Prawa autorskie zastrzeżone © 2003-2006 H. Peter
Anvin. Jest to wolne oprogramowanie; warunki rozpowszechniania
znajdują się w źródle programu. NIE ma
gwarancji, nawet PRZYDATNOŚCI HANDLOWEJ czy PRZYDATNOŚCI DO
OKREŚLONEGO CELU.