Alternar tarefas no processo ativo para novo processo

1

O que eu vou explicar é realmente sobre processos nginx, então talvez isso possa ser feito em nginx, ou talvez seja um recurso do Linux. De qualquer forma, espero que seja possível.

Eu tenho um processo ningx em execução, assim:

root     19568  .....  nginx: master (old)
app      20769  .....  nginx: worker (old)

Em seguida, envio um sinal USR2 para o processo mestre: kill -USR2 19568

Isso me dá um novo processo master e worker :

root     19568  .....  nginx: master (old)
app      20769  .....  nginx: worker (old)
root     22716  .....  nginx: master (new)
app      22717  .....  nginx: worker (new)

Atualmente, os processos old estão gerenciando todos os dados. Posso dizer ao nginx ou ao Ubuntu para trocar essas tarefas para o novo processo?

Por que preciso disso?

Eu sei que nginx tem um comando reload para recarregar dinamicamente sua configuração. Pode até atualizar seu próprio executável sem qualquer tempo de inatividade.

Mas meu servidor nginx usa um módulo TCP , por isso está recebendo dados constantemente. Por causa disso, não posso usar o comando reload ou HUP , porque os processos de trabalho estão constantemente ocupados. Eles não podem desligar.

Reiniciar o nginx me faz perder todas as conexões do cliente, e eu realmente não quero isso.

É por isso que estou procurando uma maneira de mover as tarefas que um determinado processo tem para uma nova instância desse processo.

    
por Vivendi 24.02.2015 / 08:47

1 resposta

0

Nginx depende dos processos de trabalho poderem ser encerrados normalmente. Aparentemente, ele pode iniciar novas solicitações com a configuração recém-aplicada. Mas isso não continua com as solicitações já iniciadas.

Para citar o link :

% bl0ck_qu0te%

Embora aparentemente haja uma maneira de transferir soquetes para outro processo no Linux - consulte link - ainda é improvável que nginx apenas" atenda a isso "e comece a aplicar sua (nova) configuração.

Se o objetivo subjacente a essa pergunta for aplicar as alterações a um serviço em execução sem perder as conexões do cliente no futuro, você provavelmente precisará fazer outra pergunta.

Essa pergunta pode ser sobre a implementação de alguma lógica de pausa. Como salvar o estado quando solicitado a desligar normalmente e restaurar o estado (por exemplo, estado associado a uma determinada sessão ou solicitação).

    
por Wieger 24.02.2015 / 09:50