Como usar o monit para garantir que apenas uma instância do processo esteja em execução

2

Eu tenho daemons rubis em execução. De vez em quando, acidentalmente, iniciamos uma segunda instância dele, o que causa condições de corrida.

Posso usar o Monit para detectar se várias instâncias de 'my_ruby_daemon' estão sendo executadas? E se assim matar a instância extra?

    
por Adam O'Connor 07.11.2012 / 18:42

1 resposta

3

Eu não sei se você pode fazer isso com monit , mas me parece a Solução Errada que pode trazer seus próprios problemas (especialmente se Coisas Ruins acontecerem se você matar o daemon "errado" (?)).

A Solução Certa é para que seu daemon crie e verifique um bloqueio (os arquivos PID funcionam muito bem para isso - se mydaemon.pid existir e o PID nele estiver ativo, recuse-se a iniciar o daemon)

Existem várias gemas / bibliotecas / etc do ruby ruby disponíveis ( como esta ).
Se modificar o daemon estiver fora de questão, quase todos os sistemas Unix vêm com o comando lockfile ou algo semelhante - coloque o daemon em um script de shell que cria / verifica o bloqueio antes de tentar iniciar.

Isso ajuda se você colocar o arquivo de bloqueio em algum lugar que seja limpo na reinicialização ( /tmp , /var/run , etc.) para que, se o sistema travar, o daemon reinicie quando o script init for executado.

    
por 07.11.2012 / 19:26