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
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?
Tags bash lock concurrency shell-script