flock
est vraiment excellent pour cela. Vous pouvez utiliser flock
dans un wrapper autour de votre script shell, utilisez-le sur la ligne de commande ou incorporez-le dans votre script lui-même.
La meilleure chose à propos de flock
est que pendant qu'il attend, il n'attend pas dans une boucle occupée.
C'est aussi toujours nettoie le verrou lorsque votre processus se termine / flock
sorties.
Les méthodes basées sur la création de fichiers/répertoires atomiques peuvent être verrouillées si le processus se termine sans nettoyage (ou s'il y a une panique du noyau, ou une panne de courant, ...).
Avec flock
, le noyau Linux effectue le nettoyage.
Dans le manuel,
(
flock -s 200
# ... commands executed under lock ...
) 200>/var/lock/mylockfile
Dans ce formulaire, vous pouvez envelopper un bloc de code spécifique dans votre script shell.
Ou vous pouvez l'exécuter comme ceci,
/usr/bin/flock /tmp/lockfile command
Si vous ne souhaitez pas bloquer/attendre indéfiniment, vous pouvez spécifier un délai :
-w --timeout <secs> wait for a limited amount of time
Ou utilisez simplement un argument non bloquant :
-n --nonblock fail rather than wait