O Linux normalmente não faz nenhum bloqueio (ao contrário do Windows). Isso tem muitas vantagens, mas se você precisa bloquear um arquivo, você tem várias opções. Eu sugiro
flock: apply or remove an advisory lock on an open file.
This utility manages flock(2) locks from within shell scripts or from the command line.
Para um único comando (ou script inteiro), você pode usar
flock --exclusive /var/lock/mylockfile -c command
Se você deseja executar mais comandos no seu script sob o bloqueio, use
#!/bin/bash
....
(
flock --nonblock 200 || exit 1
# ... commands executed under lock ...
) 200>/var/lock/mylockfile
Todas as operações após a chamada flock
dentro do sub-shell (...)
são executadas somente se nenhum outro processo atualmente detiver um flock
on /var/lock/mylockfile
. O bloqueio é descartado automaticamente após o sub-shell sair.
flock
também pode esperar até que o bloqueio do arquivo seja descartado (esse é o padrão). Neste caso, não use a opção --nonblock
, o que faz com que flock
falhe se nenhum bloqueio bem-sucedido puder ser obtido.