Como fazer o bloqueio de um arquivo de um script de shell? [duplicado]

2

Eu gostaria de sincronizar dois scripts Bash por meio de um bloqueio de arquivo. Como fazer isso? Zsh tem zsystem flock call, mas existe um método mais "shellish" que também está disponível para o Bash?

    
por Itzie 10.09.2016 / 09:48

1 resposta

3

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.

    
por 10.09.2016 / 10:52