То, что я собираюсь объяснить, действительно о процессах 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 заставляет меня освободить все соединения клиента, и я действительно не хочу это.
Вот почему я ищу способ переместить задачи, которые определенный процесс имеет к новому экземпляру того процесса.
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 цель этого вопроса состоит в том, чтобы применить изменения в рабочем сервисе, не теряя соединения клиента в будущем, необходимо будет, вероятно, задать другой вопрос.
, Что вопрос может быть о реализации некоторой логики паузы. Как сохранение состояния, когда спросили завершить работу корректно и восстановление состояния (например, состояния, связанного с определенной сессией или запросом).