Bloqueando em um shell script

3

Eu quero escrever um script de execução longa para que apenas uma cópia possa ser executada por vez. Se o script falhar, eu quero que uma nova invocação do script não seja interrompida por um bloqueio da invocação falhada.

O lockfile-* conjunto de utilitários é a coisa certa a ser usada? Existe uma chance de uma condição de corrida ao usá-los em um script?

O --use-pid aumenta a limitação de 5 minutos mencionada na página do manual? Meus scripts são muito mais longos.

Eu uso uma instância do Ubuntu 10.10 no Amazon EC2; sem NFS ou algo parecido.

    
por 9000 27.08.2012 / 22:09

1 resposta

5

Embora a criação de um bloqueio possa ser feita com o comando lockfile ou a chamada de sistema flock ou pela criação de um diretório (que é uma ação não interoperável), a segunda parte é mais complicada.

Se o bloqueio existir - como você determina se o bloqueio pertence a um processo ainda em execução?

A solução mais comum é colocar o PID do processo no arquivo de bloqueio.

Antes de tentar criar um bloqueio, você deve verificar se o arquivo de bloqueio já existe. Em caso afirmativo, verifique se o PID corresponde a um processo em execução que se assemelha ao processo que deve criar o bloqueio. Se este não for o caso, remova o bloqueio e recrie-o.

    
por 27.08.2012 / 23:33