flock
é realmente excelente para isso. Você pode usar flock
em um wrapper em torno do seu shell script, usá-lo na linha de comando ou incorporá-lo ao seu próprio script.
A melhor coisa sobre flock
é que enquanto espera, ele não espera em um loop ocupado.
Ele também sempre limpa o bloqueio quando o processo sai / flock
sai.
Os métodos baseados na criação de arquivos / diretórios atômicos podem ser bloqueados se o processo sair sem limpeza (ou se houver um kernel panic ou falha de energia, ...).
Com flock
, o kernel do Linux faz a limpeza.
Do manual,
(
flock -s 200
# ... commands executed under lock ...
) 200>/var/lock/mylockfile
Neste formulário, você pode envolver um bloco de código específico no seu script de shell.
Ou você pode executá-lo assim,
/usr/bin/flock /tmp/lockfile command
Se não quiser bloquear / esperar indefinidamente, você pode especificar um tempo limite:
-w --timeout <secs> wait for a limited amount of time
Ou apenas use um argumento sem bloqueio:
-n --nonblock fail rather than wait