Além de bloquear o próprio arquivo, você poderia criar um arquivo usado como um bloqueio (um arquivo de bloqueio). Há um monte de utilitários para isso, por exemplo procmail
tem lockfile
, e no Debian, o pacote liblockfile-bin
tem dotlockfile
. O Procmail deve ser comum o suficiente para estar disponível na maioria dos sistemas.
Mas basicamente se resume a algo como:
tempfile=$(mktemp ./lock.XXXX)
lockfile=./lockfile
if ln $tempfile $lockfile ; then
echo got it
# do something
rm $lockfile # after you're done
else
echo did not succeed
fi
rm $tempfile
ln
não irá aniquilar o alvo se já existir, ao contrário de algo como echo > file
, em vez disso, você recebe um erro que pode verificar.
OBSERVAÇÃO: se você quiser fazer bloqueios por NFS , use alguma ferramenta criada para essa finalidade. A semântica do acesso simultâneo aos arquivos através do NFS é ... interessante para dizer o mínimo.