flock - Gérer des verrous depuis des scripts
d'interpréteur
flock [options] fichier|répertoire
commande [arguments]
flock [options] fichier|répertoire
-c commande
flock [options] numéro
Cet utilitaire gère les verrous flock(2) à
partir de scripts d'interpréteur ou de la ligne de commande.
Les première et deuxième formes
précédentes enveloppent l'exécution d'une
commande par un verrou, de façon similaire à
su(1) ou newgrp(1). Elles verrouillent soit le fichier,
soit le répertoire indiqué, qui est créé
(en supposant que vous ayez les droits adéquats) s'il n'existe pas
déjà. Par défaut, si le verrou ne peut pas être
obtenu immédiatement, flock attend jusqu’à ce
que le verrou soit disponible.
La troisième forme utilise un fichier ouvert par son
numéro de descripteur de fichier. Consultez les exemples
suivants montrant comment l’utiliser.
- -c, --command
commande
- Passer une seule commande, sans argument, à
l’interpréteur de commandes avec -c.
- -E,
--conflict-exit-code numéro
- Le code de retour utilisé quand l’option -n est
utilisée et que le verrou en conflit existe, ou que l’option
-w est utilisée et que le délai est atteint. La
valeur par défaut est 1. Le nombre doit être
compris entre 0 et 255.
- -F, --no-fork
- Ne pas forker avant d'exécuter commande. Pendant
l'exécution, le processus flock est remplacé par
commande qui garde le verrou. Cette option est incompatible avec
--close, sans quoi plus rien ne conserverait le verrou.
- -e, -x,
--exclusive
- Obtenir un verrou exclusif, parfois appelé verrou en
écriture. C'est l'option par défaut.
- -n, --nb,
--nonblock
- Échouer plutôt qu’attendre si le verrou ne peut pas
être obtenu immédiatement. Consultez l’option
-E pour le code de retour utilisé.
- -o, --close
- Fermer le descripteur de fichier sur lequel le verrou est maintenu avant
l'exécution de commande. C'est utile si commande
lance un processus enfant qui ne devrait pas détenir le
verrou.
- -s, --shared
- Obtenir un verrou partagé, parfois appelé verrou en
lecture.
- -u, --unlock
- Supprimer un verrou. Ce n'est généralement pas
nécessaire, puisqu'un verrou est automatiquement supprimé
lorsque le fichier est fermé. Cependant, il peut être
nécessaire dans des cas particuliers, par exemple si le groupe de
commandes inclus a engendré un processus en arrière-plan qui
ne devrait pas détenir le verrou.
- -w, --wait,
--timeout délai
- Échouer si le verrou ne peut pas être obtenu en
délai secondes. Les valeurs en fractions
décimales sont permises. Consultez l’option -E pour
le code de retour utilisé. Un délai nul est
interprété comme --nonblock.
- --verbose
- Renvoyer la durée d'acquisition du verrou ou la raison pour
laquelle il n'a pas pu être obtenu.
- -V, --version
- Afficher le nom et la version du logiciel et quitter.
- -h, --help
- Afficher l’aide-mémoire puis quitter.
La commande utilise les valeurs de code de retour de
sysexits.h pour tout, sauf avec les options -n ou -w,
qui signalent un échec d’obtention du verrou avec un code de
retour donné par l’option -E, ou avec 1 par
défaut. Le code de retour donné par -E doit être 0
et 255.
En utilisant la variante commande et si
l’exécution de l’enfant a fonctionné, le code de
retour est celui de la commande enfant.
Notez que « shell> » dans les
exemples ci-dessous est une invite de commande.
- shell1> flock /tmp -c
cat
- shell2> flock -w .007
/tmp -c echo; /bin/echo $?
- Définir un verrou exclusif sur le répertoire /tmp et
la seconde commande échouera.
- shell1> flock -s
/tmp -c cat
- shell2> flock -s
-w .007 /tmp -c echo; /bin/echo $?
- Définir un verrou partagé sur le répertoire
/tmp et la seconde commande n’échouera pas. Remarquez
que la tentative d’obtenir un verrou exclusif avec la seconde
commande aurait échoué.
- shell> flock -x
fichier_verrou_local echo 'a b c'
- Récupérer le verrou exclusif
« fichier_verrou_local » avant
d’exécuter echo 'a b c'.
- (
-
flock -n 9 || exit 1
-
# ... commandes exécutées sous un verrou ...
- ) 9>/var/lock/mon_fichier_verrou
- Cette forme est pratique dans les scripts d’interpréteur de
commandes. Le mode utilisé pour ouvrir le fichier n'est pas
important pour flock ; utiliser > ou
>> permet de créer le fichier de verrouillage s'il
n'existe pas déjà, cependant, le droit d'écriture est
nécessaire. En utilisant <, le fichier doit
déjà exister, mais seul le droit de lecture est
nécessaire.
- [ "${FLOCKER}" != "$0" ] && exec env
FLOCKER="$0" flock -en "$0" "$0"
"$@" || :
- C’est un code passe-partout utile pour les scripts
d’interpréteur. Placez-le au début du script
d’interpréteur que vous voulez verrouiller et il se
verrouillera lui-même automatiquement lors de la première
exécution. Si la variable d’environnement $FLOCKER
n’est pas définie pour le script
d’interpréteur en cours d’exécution, alors
flock est exécuté et un verrou non bloquant exclusif
est récupéré (en utilisant le script lui-même
comme fichier de verrouillage) avant que le script ne
s’exécute de nouveau avec les bons arguments. La variable
d’environnement FLOCKER est aussi définie à la
bonne valeur pour que le script ne s’exécute pas de
nouveau.
- shell> exec
4<>/var/lock/mon_fichier_verrou
- shell> flock -n
4
- Cette forme est pratique pour verrouiller un fichier sans engendrer un
sous-processus. L'interpréteur ouvre le fichier verrou en lecture
et en écriture en tant que descripteur de fichier 4, puis
flock est utilisé pour verrouiller le descripteur.
Copyright © 2003-2006 H. Peter Anvin.
C'est un logiciel libre ; consultez les sources pour les conditions de
copie. Il n'y a AUCUNE garantie ; même pas de VALEUR MARCHANDE
ou d'ADÉQUATION À UNE UTILISATION PARTICULIÈRE.
La traduction française de cette page de manuel a
été créée par Christophe Blaess
<ccb@club-internet.fr>, Michel Quercia <quercia AT cal DOT enst DOT
fr>, Thierry Vignaud <tvignaud@mandriva.com>,
Frédéric Delanoy <delanoy_f@yahoo.com>, Thierry Vignaud
<tvignaud@mandriva.com>, Christophe Sauthier
<christophe@sauthier.com>, Sébastien Blanchet,
Jérôme Perzyna <jperzyna@yahoo.fr>, Aymeric Nys
<aymeric AT nnx POINT com>, Alain Portal
<aportal@univ-montp2.fr>, Thomas Huriaux
<thomas.huriaux@gmail.com>, Yves Rütschlé
<l10n@rutschle.net>, Jean-Luc Coulon (f5ibh)
<jean-luc.coulon@wanadoo.fr>, Julien Cristau
<jcristau@debian.org>, Philippe Piette
<foudre-blanche@skynet.be>, Jean-Baka Domelevo-Entfellner
<domelevo@gmail.com>, Nicolas Haller <nicolas@boiteameuh.org>,
Sylvain Archenault <sylvain.archenault@laposte.net>, Valéry
Perrin <valery.perrin.debian@free.fr>, Jade Alglave
<jade.alglave@ens-lyon.org>, Nicolas François
<nicolas.francois@centraliens.net>, Alexandre Kuoch
<alex.kuoch@gmail.com>, Lyes Zemmouche <iliaas@hotmail.fr>,
Florentin Duneau <fduneau@gmail.com>, Alexandre Normand
<aj.normand@free.fr>, David Prévot <david@tilapin.org> et
Jean-Philippe MENGUAL <jpmengual@debian.org>
Cette traduction est une documentation libre ; veuillez
vous reporter à la
GNU General
Public License version 3 concernant les conditions de copie et de
distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page
de manuel, veuillez envoyer un message à
debian-l10n-french@lists.debian.org.