Задачи переключателя на активном процессе к новому процессу

То, что я собираюсь объяснить, действительно о процессах nginx, поэтому возможно, это может быть сделано в nginx, или возможно это - функция Linux. В так или иначе, я надеюсь, что это возможно.

Я имею ningx выполнение процесса, которое похоже на это:

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

Я затем отправляю a USR2 предупредите к основному процессу: kill -USR2 19568

Это дает мне новое master и worker процесс:

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

Таким образом, в настоящее время, old процессы являются handeling все данные. Я могу сказать nginx или Ubuntu для свопинга тех задач к новому procceses?


Почему мне нужно это?

Я знаю nginx имеет a reload управляйте для динамичной перезагрузки его конфигурации. Это может даже обновить свой собственный исполняемый файл без любого времени простоя.

Но мой nginx сервер использует a TCP модуль, таким образом, это получает данные постоянно. Из-за этого я не могу использование a reload или HUP команда, потому что рабочие процессы постоянно заняты. Они не могут закрыться.

Перезапуск nginx заставляет меня освободить все соединения клиента, и я действительно не хочу это.

Вот почему я ищу способ переместить задачи, которые определенный процесс имеет к новому экземпляру того процесса.

1
задан 24 February 2015 в 10:47

1 ответ

Nginx зависит от способности рабочих процессов завершить работу корректно. По-видимому, это может запустить новые запросы с недавно прикладной конфигурации. Но это не продолжается, уже запустил запросы.

Для заключения в кавычки от http://nginx.org/en/docs/beginners_guide.html :

, Как только основной процесс получает сигнал перезагрузить конфигурацию, это проверяет законность синтаксиса нового конфигурационного файла и пытается применить конфигурацию, обеспеченную в нем. Если это имеет успех, основной процесс запускает новые рабочие процессы и отправляет сообщения в старые рабочие процессы, запрашивая их закрыться. Иначе основной процесс откатывает изменения и продолжает работать со старой конфигурацией. Старые рабочие процессы, получая команду для закрытий, прекращают принимать новые соединения и продолжают обслуживать текущие запросы, пока все такие запросы не обслуживаются. После этого, старый выход рабочих процессов.

, Хотя, по-видимому, существует способ передать сокеты другому процессу в Linux - видят https://stackoverflow.com/questions/1997622/can-i-open-a-socket-and-pass-it-to-another-process-in-linux - это все еще маловероятно nginx, просто 'взял бы на тот' и только начал бы применять его данную (новую) конфигурацию.

, Если underlieing цель этого вопроса состоит в том, чтобы применить изменения в рабочем сервисе, не теряя соединения клиента в будущем, необходимо будет, вероятно, задать другой вопрос.

, Что вопрос может быть о реализации некоторой логики паузы. Как сохранение состояния, когда спросили завершить работу корректно и восстановление состояния (например, состояния, связанного с определенной сессией или запросом).

0
ответ дан 3 August 2019 в 14:45

Другие вопросы по тегам:

Похожие вопросы: