Como controlar a simultaneidade do script bash, herança do flock

3

Eu tenho um script de implantação bash que lida com a implantação de código atualizado para uma instância do Tomcat no CentOS, no entanto, o Chef e o RunDeck podem invocar o script e, como o Chef é executado periodicamente, há uma chance de uma colisão.

Como evito que o script de implantação seja executado duas vezes simultaneamente?

A resposta padrão parece ser envolver a lógica de implementação em flock .

No entanto, como a implementação reinicia o tomcat que não está funcionando - o novo processo java herda o bloqueio e impede a execução de qualquer outro script de implantação.

Existe outra maneira de impedir a execução simultânea ou uma maneira de evitar flock herança?

    
por Jason Martin 10.07.2014 / 17:38

1 resposta

3

Você pode fechar o descritor de arquivo em que flock mantém o bloqueio antes de executar o programa que você deseja executar desbloqueado.

(
  flock -n 9 || exit 120
  …
  (exec 9>&-; tomcat &)
) 9>/var/run/my.lock
    
por 11.07.2014 / 02:17