Mercurial > hg > nginx-site
comparison xml/ru/docs/control.xml @ 76:4a4caa566120
Russian documentation import.
Changes in module.dtd: <example> now allowed to contain <value> and
<emphasis> elements (we need this to show important parts in examples),
less strict checking of <directive> syntax (we don't want to fully
document some directives, notably deprecated ones).
Known issues:
1. <syntax> elements are preserved as is, they will require manual conversion
(likely to some not-yet-existed format a la DocBook cmdsynopsis, as
currently used one seems to be incomplete);
2. <value> no longer corresponds to replaceable content, and it's use in
examples isn't correct;
3. <link doc="document#fragment"> doesn't work with current xslt, either
should be supported or changed to <link doc="document" id="fragment">.
The following files are intentionally omitted: maillists.xml (support.xml
should be used instead), experimental.xml (obsolete), faq.xml (conflicts
with existing one, needs discussion).
Not yet linked to site.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Tue, 11 Oct 2011 12:57:50 +0000 |
parents | |
children | 0a45870d0160 |
comparison
equal
deleted
inserted
replaced
75:2bf4cd2787c5 | 76:4a4caa566120 |
---|---|
1 <!DOCTYPE article SYSTEM "../../../dtd/article.dtd"> | |
2 | |
3 <article title="Управление nginx" | |
4 link="/ru/docs/control.html" | |
5 lang="ru"> | |
6 | |
7 <section> | |
8 | |
9 <para> | |
10 Управлять nginx можно с помощью сигналов. Номер главного процесса по умолчанию | |
11 записывается в файл <command>/usr/local/nginx/logs/nginx.pid</command>. | |
12 Изменить имя этого файла можно при конфигурации сборки или же в | |
13 <command>nginx.conf</command> директивой | |
14 <link doc="ngx_core_module.xml#pid">pid</link>. | |
15 Главный процесс поддерживает следующие сигналы: | |
16 <note> | |
17 <table> | |
18 | |
19 <tr><td width="20%">TERM, INT</td><td>быстрое завершение</td></tr> | |
20 <tr><td width="20%">QUIT</td><td>плавное завершение</td></tr> | |
21 <tr><td width="20%">HUP</td><td>изменение конфигурации, | |
22 обновление изменившейся временной зоны (только для FreeBSD и Linux), | |
23 запуск новых рабочих процессов с новой конфигурацией, | |
24 плавное завершение старых рабочих процессов</td></tr> | |
25 <tr><td width="20%">USR1</td><td>переоткрытие лог-файлов</td></tr> | |
26 <tr><td width="20%">USR2</td><td>обновление исполняемого файла</td></tr> | |
27 <tr><td width="20%">WINCH</td><td>плавное завершение рабочих процессов</td></tr> | |
28 | |
29 </table> | |
30 </note> | |
31 </para> | |
32 | |
33 <para> | |
34 Управлять рабочими процессами по отдельности не нужно. | |
35 Тем не менее, они тоже поддерживают некоторые сигналы: | |
36 <note> | |
37 <table> | |
38 | |
39 <tr><td width="20%">TERM, INT</td><td>быстрое завершение</td></tr> | |
40 <tr><td width="20%">QUIT</td><td>плавное завершение</td></tr> | |
41 <tr><td width="20%">USR1</td><td>переоткрытие лог-файлов</td></tr> | |
42 | |
43 </table> | |
44 </note> | |
45 </para> | |
46 | |
47 </section> | |
48 | |
49 | |
50 <section name="Изменение конфигурации" id="reconfiguration"> | |
51 | |
52 <para> | |
53 Для того, чтобы nginx перечитал файл конфигурации, нужно послать | |
54 главному процессу сигнал HUP. Главный процесс сначала проверяет | |
55 синтаксическую правильность конфигурации, а затем пытается применить | |
56 новую конфигурацию, то есть, открыть лог-файлы и новые listen сокеты. | |
57 Если ему это не удаётся, то он откатывает изменения и продолжает работать | |
58 со старой конфигурацией. | |
59 Если же удаётся, то он запускает новые рабочие процессы, а старым | |
60 шлёт сообщение о плавном выходе. Старые рабочие процессы закрывают listen | |
61 сокеты и продолжают обслуживать старых клиентов. После обслуживания всех | |
62 клиентов старые рабочие процессы завершаются. | |
63 </para> | |
64 | |
65 <para> | |
66 Предположим, на FreeBSD 4.x команда | |
67 <programlisting> | |
68 ps ax -o pid,ppid,user,%cpu,vsz,wchan,command | egrep '(nginx|PID)' | |
69 </programlisting> | |
70 показывает примерно такую картину: | |
71 <programlisting> | |
72 PID PPID USER %CPU VSZ WCHAN COMMAND | |
73 33126 1 root 0.0 1148 pause nginx: master process /usr/local/nginx/sb | |
74 33127 33126 nobody 0.0 1380 kqread nginx: worker process (nginx) | |
75 33128 33126 nobody 0.0 1364 kqread nginx: worker process (nginx) | |
76 33129 33126 nobody 0.0 1364 kqread nginx: worker process (nginx) | |
77 </programlisting> | |
78 </para> | |
79 | |
80 <para> | |
81 Если послать сигнал HUP главному процессу, то картина может быть такой: | |
82 <programlisting> | |
83 PID PPID USER %CPU VSZ WCHAN COMMAND | |
84 33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sb | |
85 33129 33126 nobody 0.0 1380 kqread nginx: worker process is shutting down (n | |
86 33134 33126 nobody 0.0 1368 kqread nginx: worker process (nginx) | |
87 33135 33126 nobody 0.0 1368 kqread nginx: worker process (nginx) | |
88 33136 33126 nobody 0.0 1368 kqread nginx: worker process (nginx) | |
89 </programlisting> | |
90 </para> | |
91 | |
92 <para> | |
93 Один старый рабочий процесс 33129 всё ещё продолжает работать. По истечении | |
94 некоторого времени он завершается: | |
95 <programlisting> | |
96 PID PPID USER %CPU VSZ WCHAN COMMAND | |
97 33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sb | |
98 33134 33126 nobody 0.0 1368 kqread nginx: worker process (nginx) | |
99 33135 33126 nobody 0.0 1368 kqread nginx: worker process (nginx) | |
100 33136 33126 nobody 0.0 1368 kqread nginx: worker process (nginx) | |
101 </programlisting> | |
102 </para> | |
103 | |
104 </section> | |
105 | |
106 | |
107 <section name="Ротация лог-файлов" id="logs"> | |
108 | |
109 <para> | |
110 Лог-файлы нужно переименовать, а затем послать сигнал USR1 главному процессу. | |
111 Он откроет заново все текущие открытые файлы и назначит им | |
112 в качестве владельца непривилегированного пользователя, под которым | |
113 работают рабочие процессы. После успешного открытия главный процесс | |
114 закрывает все открытые файлы и посылает сообщение о переоткрытии файлов | |
115 рабочим процессам. | |
116 Они также открывают новые файлы и сразу же закрывают старые. | |
117 В результате старые файлы практически сразу же готовы для дальнейшей | |
118 обработки, например, их можно сжимать. | |
119 </para> | |
120 | |
121 </section> | |
122 | |
123 | |
124 <section name="Обновление сервера на лету" id="upgrade"> | |
125 | |
126 <para> | |
127 Для обновления сервера нужно записать на место старого исполняемого файла новый. | |
128 Затем нужно послать сигнал USR2 главному процессу—он | |
129 переименует свой файл с номером процесса в файл | |
130 с суффиксом <command>.oldbin</command>, например, | |
131 <command>/usr/local/nginx/logs/nginx.pid.oldbin</command>, | |
132 после чего запустит новый исполняемый файл, а тот в свою | |
133 очередь—свои рабочие процессы: | |
134 <programlisting> | |
135 PID PPID USER %CPU VSZ WCHAN COMMAND | |
136 33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sb | |
137 33134 33126 nobody 0.0 1368 kqread nginx: worker process (nginx) | |
138 33135 33126 nobody 0.0 1380 kqread nginx: worker process (nginx) | |
139 33136 33126 nobody 0.0 1368 kqread nginx: worker process (nginx) | |
140 36264 33126 root 0.0 1148 pause nginx: master process /usr/local/nginx/sb | |
141 36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) | |
142 36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) | |
143 36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) | |
144 </programlisting> | |
145 </para> | |
146 | |
147 <!-- | |
148 | |
149 <para> | |
150 Процесс с новым исполняемым файлом 36264 создаёт свой файл с номером процесса | |
151 с суффиксом <command>.newbin</command>, например, | |
152 <command>/usr/local/nginx/logs/nginx.pid.newbin</command>. | |
153 </para> | |
154 | |
155 --> | |
156 | |
157 <para> | |
158 Теперь все рабочие процессы наравне принимают запросы. | |
159 Если послать сигнал WINCH первому главному процессу, то он пошлёт своим | |
160 рабочим процессам сообщение о плавном выходе, и они будут постепенно выходить: | |
161 <programlisting> | |
162 PID PPID USER %CPU VSZ WCHAN COMMAND | |
163 33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sb | |
164 33135 33126 nobody 0.0 1380 kqread nginx: worker process is shutting down (n | |
165 36264 33126 root 0.0 1148 pause nginx: master process /usr/local/nginx/sb | |
166 36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) | |
167 36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) | |
168 36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) | |
169 </programlisting> | |
170 </para> | |
171 | |
172 <para> | |
173 <note> | |
174 При использовании метода rtsig новые процессы могут не принимать соединения | |
175 даже после того, как старому главному процессу послан сигнал WINCH. | |
176 В этом случае новому главному процессу нужно посылать сигнал USR1 до тех пор, | |
177 пока новые процессы не начнут принимать соединения. | |
178 </note> | |
179 </para> | |
180 | |
181 <para> | |
182 По истечении времени запросы будут обрабатывать только новые рабочие процессы: | |
183 <programlisting> | |
184 PID PPID USER %CPU VSZ WCHAN COMMAND | |
185 33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sb | |
186 36264 33126 root 0.0 1148 pause nginx: master process /usr/local/nginx/sb | |
187 36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) | |
188 36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) | |
189 36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) | |
190 </programlisting> | |
191 </para> | |
192 | |
193 <para> | |
194 Нужно заметить, что старый процесс не закрывает свои listen сокеты и при | |
195 необходимости ему можно сказать, чтобы он снова запустил свои рабочие процессы. | |
196 Если работа нового исполняемого файла по каким-то причинам не устраивает, | |
197 то можно сделать следующее: | |
198 <list> | |
199 | |
200 <listitem> | |
201 <para> | |
202 Послать старому главному процессу сигнал HUP. Старый процесс, не перечитывая | |
203 конфигурации, запустит новые рабочие процессы. После этого можно | |
204 плавно завершить новые процессы, послав их главному процессу QUIT. | |
205 </para> | |
206 </listitem> | |
207 | |
208 <listitem> | |
209 <para> | |
210 Послать новому главному процессу сигнал TERM, он пошлёт сообщение о | |
211 немедленном выходе рабочим процессам и все они практически сразу же завершатся. | |
212 По выходу нового главного процесса старый запустит новые рабочие процессы. | |
213 </para> | |
214 </listitem> | |
215 | |
216 <listitem> | |
217 <para> | |
218 Если же новые процессы не завершаются, то нужно послать им сигнал KILL. | |
219 По выходу нового главного процесса старый запустит свои рабочие процессы. | |
220 </para> | |
221 </listitem> | |
222 | |
223 </list> | |
224 | |
225 </para> | |
226 | |
227 <para> | |
228 Если новый главный процесс выходит, то старый процесс убирает | |
229 суффикс <command>.oldbin</command> из имени файла с номером процесса. | |
230 </para> | |
231 | |
232 <para> | |
233 Если же обновление прошло удачно, то старому процессу нужно послать сигнал | |
234 QUIT, и у нас остаются только новые процессы: | |
235 <programlisting> | |
236 PID PPID USER %CPU VSZ WCHAN COMMAND | |
237 36264 1 root 0.0 1148 pause nginx: master process /usr/local/nginx/sb | |
238 36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) | |
239 36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) | |
240 36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) | |
241 </programlisting> | |
242 </para> | |
243 | |
244 <!-- | |
245 | |
246 <para> | |
247 После этого остаётся только переименовать | |
248 <command>/usr/local/nginx/logs/nginx.pid.newbin</command> в | |
249 <command>/usr/local/nginx/logs/nginx.pid</command> и обновление можно считать | |
250 завершённым. | |
251 </para> | |
252 | |
253 --> | |
254 | |
255 </section> | |
256 | |
257 </article> |