Executando um processo de daemon do upstart

4

Estou executando meu aplicativo em um VPS no Ubuntu 12.04 LTS.

E eu tenho um problema com um processo de daemon para um dos meus aplicativos. Esse processo é chamado de "delayed_job" (se não estiver familiarizado, trata-se apenas de um manipulador de tarefa em segundo plano).

O problema com este processo é que às vezes ele é morto (suponho que seja porque eu tenho uma quantidade limitada de RAM no meu servidor - apenas 1GB).

Mas o principal problema com isso é que não é possível reinicializar novamente após um sinal de falha ou "kill", ao contrário dos processos "unicorn" (que é um servidor de aplicativos Rails), que estão sempre sendo reinicializados, não importa o que aconteça a eles.

E sim, isso é muito importante, porque muitos recursos de aplicativos estão usando tarefas em segundo plano.

A mesma história acontece quando há trabalhos de manutenção no VPS (iniciados pelo proprietário do VPS) e após a reinicialização o processo "delayed_job" não está mais presente no sistema.

Este é o comando que eu corro todas as vezes para inicializar: RAILS_ENV=production script/delayed_job start

É um problema bem conhecido, mas a única solução que encontrei na Internet é este artigo: link sugere usar o recurso "upstart" do Linux com a opção "respawn", que é capaz de reiniciar o processo se ele for morto ou travado.

Mesmo que o artigo esteja um pouco desatualizado, descobri que o Ubuntu 12.04 deve suportar esse recurso e criei um link simbólico no diretório /etc/init (eu chamei: delayed_job.conf) para o " delayed_job "arquivo que eu coloquei em uma das minhas pastas de aplicativos (app_name / config, para ser exato) - Eu fiz tudo o que este artigo diz.

Meu problema é: quando eu tento iniciar este novo processo ( start delayed_job ) no console eu recebo:

delayed_job start/running, process 6000

Mas, na verdade, nenhum processo "delayed_job" está sendo criado.

E o status ( status delayed_job ) do processo initctl ainda é: delayed_job stop/waiting

Depois de executar kill -9 6000 , recebo -bash: kill: (6000) - No such process

Então, isso significa que nada é executado. Eu tentei rodar várias vezes em diferentes condições - nada, sem sucesso. É simplesmente não funciona.

Existe alguma coisa que eu poderia tentar fazer funcionar, ou é apenas inútil?

    
por Dmitri 23.02.2014 / 20:11

1 resposta

4

Parece que sua estrofe EXPECT está incorreta ou não está lá. Upstart está rastreando o pid errado. Veja o livro de receitas para obter instruções sobre como usar ESPERE . Observe o aviso sobre a importância dessa seção para entender.

Observe que, se seu aplicativo for muito forjado (significando que ele é dobrado mais de duas vezes) para que o Upstart rastreie seu pid, você poderá rastreá-lo por conta própria. O aplicativo pode ter um mecanismo para gravar um arquivo pid ou você pode capturá-lo com start-stop-daemon . Veja esta resposta para um exemplo, especificamente o pg_agent.conf arquivo.

Editar:

Observe que, se o Upstart não conseguir acompanhar o pid do seu aplicativo, você não poderá usar a sub-rotina RESPAWN . Neste caso, o Upstart pode não atender às suas necessidades. Talvez um produto concorrente como forever seja. Não sei.

    
por Brian.D.Myers 25.02.2014 / 18:45