FLOCK(1)

NAMN
flock - hantera lås från skalskript

SYNOPSIS

flock [flaggor] fil|katalog kommando [arguments]

flock [flaggor] fil|katalog -c kommando

flock [flaggor] nummer

BESKRIVNING

Detta verktyg hanterar flock(2)-lås inifrån skalskript eller från kommandoraden.

Den första och andra av ovanstående former låser utförandet av ett kommando, på ett sätt som liknar su(1) eller newgrp(1). De låser en angiven fil eller katalog, som skapas (med lämpliga behörigheter) om den inte redan finns. Om låset inte kan förvärvas omedelbart väntar flock som standard tills låset är tillgängligt.

Den tredje formen använder en öppen fil med dess filbeskrivare nummer. Se exemplen nedan för hur det kan användas.

FLAGGOR

-c, --command kommando
    Skicka ett enda kommando, utan argument, till skalet med -c.

-E, --conflict-exit-code nummer
    Avslutningsstatus som används när flaggan -n används och det finns ett motstridigt lås, eller när flaggan -w används och tidsgränsen har uppnåtts. Standardvärdet är 1. nummer måste ligga inom intervallet 0 till 255.

-F, --no-fork
    Gör ingen fork innan du utför kommando. När flock-processen exekveras ersätts den av kommando som fortsätter att hålla låset. Den här flaggan är inte kompatibelt med --close eftersom det annars inte skulle finnas något kvar att hålla låset.

-e, -x, --exclusive
    Skaffa ett exklusivt lås, ibland kallat skrivlås. Detta är standardinställningen.

-n, --nb, --nonblocking
    Misslyckas i stället för att vänta om låset inte kan förvärvas omedelbart. Se flaggan -E för den avslutsstatus som används.

-o, --close
    Stäng filbeskrivaren som låset hålls på innan du utför kommando. Detta är användbart om kommando startar en underordnad process som inte bör hålla låset.

-s, --shared
    Få ett delat lås, ibland kallat ett läslås.

-u, --unlock
    Släpp ett lås. Detta är vanligtvis inte nödvändigt, eftersom ett lås automatiskt släpps när filen stängs. Det kan dock krävas i särskilda fall, t.ex. om den bifogade kommandogruppen kan ha förgrenat en bakgrundsprocess som inte borde hålla låset.

-w, --wait, --timeout seconds
    Misslyckas om låset inte kan förvärvas inom sekunder. Decimala fraktionerade värden är tillåtna. Se flaggan -E för den avslutsstatus som används. Noll antal sekunder tolkas som --nonblock.

--fcntl
    Instead of flock(2), apply an fcntl(2) open file description lock (that is, using the F_OFD_SETLK (non-blocking) or F_OFD_SETLKW (blocking) commands). These locks are independent of those applied via flock(2), but, unlike traditional POSIX fcntl(2) locks (F_SETLK, F_SETLKW), have semantics matching those of flock(2).

    Detta är endast tillgängligt för kärnversioner >= 3.15.

--start offset
    The starting offset for lock. This option implies --fcntl.

--length number
    The number of bytes to lock. This option implies --fcntl.

--verbose
    Rapportera hur lång tid det tog att skaffa låset eller varför låset inte kunde skaffas.

-h, --help
    Visa hjälptext och avsluta.

-V, --version
    Visa version och avsluta.

AVSLUTSSTATUS

Kommandot använder <sysexits.h> utgångsstatusvärden för allt, utom när något av flaggorna -n eller -w används, som rapporterar ett misslyckande med att förvärva låset med en utgångsstatus som anges av flaggan -E, eller 1 som standard. Utgångsstatusen som ges av -E måste ligga inom intervallet 0 till 255.

När kommando-varianten används och det underordnade kommandot utförs, är utgångsstatusen den som gäller för det underordnade kommandot.

ANTECKNINGAR

flock upptäcker inte deadlock. Se flock(2) för mer information.

Vissa filsystem (t.ex. NFS och CIFS) har en begränsad implementering av flock(2) och flock kan alltid misslyckas. För detaljer se flock(2), nfs(5) och mount.cifs(8). Beroende på monterinsflaggor kan flock alltid misslyckas där.

EXEMPEL

Observera att "shell> " i exemplen är en kommandoradsprompt.

shell1> flock /tmp -c cat; shell2> flock -w .007 /tmp -c echo; /bin/echo $?
    Sätt exklusivt lås på katalogen /tmp och det andra kommandot kommer att misslyckas.

shell1> flock -s /tmp -c cat; shell2> flock -s -w .007 /tmp -c echo; /bin/echo $?
    Sätt shared lock till katalogen /tmp så kommer det andra kommandot inte att misslyckas. Observera att försök att få exklusivt lås med det andra kommandot skulle misslyckas.

shell> flock -x local-lock-fil echo 'a b c'
    Hämta det exklusiva låset "local-lock-file" innan du kör echo med 'a b c'.

(; flock -n 9 || exit 1; # ... kommandon utförda under lås ...; ) 9>/var/lock/mylockfile
    Formuläret är praktiskt i skalskript. Det läge som används för att öppna filen spelar ingen roll för flock; om du använder > eller >> kan låsfilen skapas om den inte redan finns, men skrivbehörighet krävs. Om du använder < krävs att filen redan finns, men endast läsbehörighet krävs.

[ "${FLOCKER}" != "$0" ] && exec env FLOCKER="$0" flock -en "$0" "$0" "$@" || :
    Detta är användbar standardkod för skalskript. Lägg den högst upp i det skalskript som du vill låsa så låser det sig automatiskt vid första körningen. Om miljövariabeln $FLOCKER inte är inställd på det skalskript som körs, exekveras flock och tar ett exklusivt icke-blockerande lås (med själva skriptet som låsfil) innan det exekveras igen med rätt argument. Det ställer också in miljövariabeln FLOCKER till rätt värde så att det inte körs igen.

shell> exec 4<>/var/lock/mylockfile; shell> flock -n 4
    Denna form är lämplig för att låsa en fil utan att starta en subprocess. Shell öppnar låsfilen för läsning och skrivning som fildeskriptor 4, sedan används flock för att låsa deskriptorn.

UPPHOVSPERSONER

UPPHOVSRÄTT

Copyright © 2003-2006 H. Peter Anvin. Detta är fri programvara; se källan för kopieringsvillkor. Det finns INGEN garanti; inte ens för SÄLJBARHET eller LÄMPLIGHET FÖR ETT BESTÄMMT SYFTE.

SE ÄVEN

flock(2), fcntl(2)

FELRAPPORTERING

För felrapporter, använd

TILLGÄNGLIGHET

Kommandot flock ingår i paketet util-linux som kan hämtas från