1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
|
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="./style/manual.tr.xsl"?>
<!-- English Revision: 1174747 -->
<!-- =====================================================
Translated by: Nilgün Belma Bugüner <nilgun belgeler.org>
Reviewed by: Orhan Berent <berent belgeler.org>
========================================================== -->
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<manualpage metafile="stopping.xml.meta">
<title>Apache HTTP Sunucusunun Durdurulması ve Yeniden Başlatılması</title>
<summary>
<p>Bu belge Apache HTTP Sunucusunun Unix benzeri sistemlerde durdurulması
ve yeniden başlatılması konularını kapsar. Windows NT, 2000 ve XP
kullanıcıları Apache HTTPd’yi bu platformlarda nasıl denetimlerine
alacaklarını öğrenmek için <a href="platform/windows.html#winsvc"
>httpd’nin Bir Hizmet Olarak Çalıştırılması</a> sayfasına, Windows 9x ve
ME kullanıcıları ise <a href="platform/windows.html#wincons">httpd’nin
Bir Konsol Uygulaması Olarak Çalıştırılması</a> sayfasına
bakabilirler.</p>
</summary>
<seealso><program>httpd</program></seealso>
<seealso><program>apachectl</program></seealso>
<seealso><a href="invoking.html">Başlatma</a></seealso>
<section id="introduction"><title>Giriş</title>
<p>Apache HTTP Sunucusunu durdurmak ve yeniden başlatmak için çalışan
<program>httpd</program> süreçlerine bir sinyal göndermeniz gerekir.
Sinyal göndermek için iki yol vardır. İlki, süreçlere doğrudan sinyal
göndermek için unix <code>kill</code> komutunun kullanımıdır. Bu
suretle, sisteminizde çalışmakta olan bir çok <program>httpd</program>
sürecini uyarabilirsiniz ama süreç kimliği <directive
module="mpm_common">PidFile</directive> yönergesi ile belirtilen dosyada
tutulan ana süreç dışında hiçbirine sinyal göndermemelisiniz. Başka
bir deyişle, ana süreç haricinde hiçbir sürece sinyal göndermeye normal
olarak ihtiyacınız olmaması gerekir. Ana sürece gönderebileceğiniz
dört çeşit sinyal vardır:
<code><a href="#term">TERM</a></code>,
<code><a href="#graceful">USR1</a></code>,
<code><a href="#hup">HUP</a></code> ve
<code><a href="#gracefulstop">WINCH</a></code>. Bunlar yeri geldikçe
açıklanacaktır.</p>
<p>Ana sürece <code>kill</code> ile sinyal göndermek için şöyle bir
komut verebilirsiniz:</p>
<example>kill -TERM `cat /usr/local/apache2/logs/httpd.pid`</example>
<p><program>httpd</program> süreçlerine sinyal göndermenin ikinci yolu
<code>-k</code> komut satırı seçeneğini şu değerlerden biri ile
kullanmaktır: <code>stop</code>, <code>restart</code>,
<code>graceful</code> ve <code>graceful-stop</code>. Bunlar aşağıda
açıklanacaktır. <code>-k</code> komut satırı seçeneği
<program>httpd</program>’ye ait olsa da ana sürece bu sinyalleri
göndermek için <program>apachectl</program> betiğini kullanmanızı
öneririz. <program>apachectl</program>, komut satırı seçeneklerini
<program>httpd</program>’ye aktaracaktır.</p>
<p><program>httpd</program>’ye sinyal gönderdikten sonra olup biteni şu
komutla izleyebilirsiniz:</p>
<example>tail -f /usr/local/apache2/logs/error_log</example>
<p>Bu örnekleri, kendi <directive module="core">ServerRoot</directive> ve
<directive module="mpm_common">PidFile</directive> yönergelerinizdeki
ayarlara uygun olarak değiştirdikten sonra kullanınız.</p>
</section>
<section id="term"><title>Hemen Durdur</title>
<dl><dt>Sinyal: TERM</dt>
<dd><code>apachectl -k stop</code></dd>
</dl>
<p>Ana sürece <code>TERM</code> veya <code>stop</code> sinyali
göndererek tüm çocukların bir an önce öldürülmeye çalışılmasını sağlamış
olursunuz. Tüm çocukların öldürülmesi bir kaç saniye sürebilir. Son
olarak ana süreç çıkacaktır. Yanıtlanmakta olan istekler hemen
sonlandırılacak ve artık isteklere yanıt verilmeyecektir.</p>
</section>
<section id="graceful"><title>Nazikçe Yeniden Başlat</title>
<dl><dt>Sinyal: USR1</dt>
<dd><code>apachectl -k graceful</code></dd>
</dl>
<p>Ana sürece <code>USR1</code> veya <code>graceful</code> sinyalinin
gönderilmesi, çocuklara ellerindeki mevcut işleri bitirdikten sonra
(veya sundukları bir şey yoksa hemen) çıkmalarının <em>önerilmesi</em>
demektir. Ana süreç kendi yapılandırma dosyalarını yeniden okur ve
kendi günlük dosyalarını yeniden açar. Ana sürecin öldürdüğü her sürecin
yerine yeni yapılandırma <em>kuşağından</em> bir süreç başlatır ve hemen
yeni isteklere hizmet sunulmaya başlanır.</p>
<p>Bu kod MPM’lerin süreçleri denetleyen yönergelerine daima uyacak
şekilde tasarlanmıştır. Bu suretle, istemcilere hizmet sunacak çocuk
süreçler ve evreler, yeniden başlatma işleminde de uygun sayıda
sağlanmış olur. Bununla birlikte, <directive
module="mpm_common">StartServers</directive> yönergesinde şöyle
davranılır: İlk saniye içinde en azından <directive
module="mpm_common">StartServers</directive> sayıda yeni çocuk
oluşturulmamışsa iş olmayan bir devreyi geçiştirecek kadarı oluşturulur.
Ardından sunucunun mevcut yükünü karşılamak için gereken sayıda çocuk
süreç oluşturulur. Bu suretle, kod her ikisi için de gereğini yerine
getirmeye çalışmış olur.</p>
<p><module>mod_status</module> kullanıcıları <code>USR1</code>
gönderildiği zaman sunucu istatistiklerinin sıfırlanmadığı konusunda
uyarılacaktır. Kod, sunucunun yeni isteklere yanıt veremediği zamanı en
aza indirmenin yanısıra ayar parametrelerinize de uymak üzere
tasarlanmıştır (yeni istekler işletim sistemi tarafından kuyruğa
alınacağından bir istek kaybı olayı yaşanmaz). Bunu sağlamak için, her
iki kuşağın çocuklarının izini sürecek bir <em>çetele</em> tutulur.</p>
<p><module>mod_status</module> modülü, nazikçe yeniden başlat komutunun
verilmesinden önce başlamış ve sunulmaya devam eden isteklere bakan
çocukları imlemek için ayrıca bir <code>G</code> (Graceful’un baş harfi)
kullanır.</p>
<p>Günlük dosyası döndürme betiğine, yeniden başlatma öncesi günlüğe yazan
tüm çocukların işini bitirdiğini <code>USR1</code> kullanarak
bildirmenin bir yolu yoktur. Önerimiz, eski günlük kaydı üzerinde bir
işlem yapmaya başlamadan önce <code>USR1</code> sinyali gönderilmesinin
ardından belli bir süre beklenilmesi olacaktır. Örneğin, düşük band
genişliğine sahip istemcilere hizmet sunan çoğu sürecin işinin 10
dakikadan önce bitmeyeceğini gözönüne alarak eski günlük üzerinde işlem
yapmaya başlamak için 15 dakika beklenebilir.</p>
<note>
<p>Bir yeniden başlatma isteğinde, yapılandırma dosyalarında bir hata
olmadığından emin olmak için önce bir sözdizimi denetimi yapılır. Eğer
yapılandırma dosyalarınızda bir hata varsa bu sözdizimi hatasıyla ilgili
bir hata iletisi alırsınız ve sunucu yeniden başlamayı reddeder. Bu
yolla, bir hata sonucu sunucunun çökerek yeniden başlamaması nedeniyle
işlevsiz bir sunucuyla başbaşa kalmanız önlenmiştir.</p>
<p>Ancak, bu hala sunucunuzun düzgünce yeniden başlatılmasını garanti
etmeyecektir. Yapılandırma dosyalarınızı sözdizimi denetiminin yanında
anlamlandırılması bakımından da sınamak için
<program>httpd</program>’nin root olmayan bir kullanıcı tarafından
çalıştırılmasını deneyebilirsiniz. Eğer yapılandırma dosyalarında bir
hata yoksa soketleri ve günlük dosyalarını açmaya çalışırken root
aidiyetinde çalışmadığından veya çalışmakta olan asıl sunucu bu portları
zaten dinlediğinden başarısız olacaktır. Eğer başka bir sebeple
başarısız olursa olası sebep bir yapılandırma dosyası hatasıdır ve asıl
sunucuya ‘nazikçe yeniden başla’ komutunu vermeden önce bu hatayı
düzeltmeniz gerekir.</p></note>
</section>
<section id="hup"><title>Hemen Yeniden Başlat</title>
<dl><dt>Sinyal: HUP</dt>
<dd><code>apachectl -k restart</code></dd>
</dl>
<p>Ana sürece <code>HUP</code> veya <code>restart</code> sinyalinin
gönderilmesi tüm çocukların <code>TERM</code> sinyali gönderilmiş gibi
öldürülmesine sebep olur fakat ana sürecin çıkmasını sağlamaz.
Ana süreç yapılandırma dosyalarını yeniden okur ve günlük kayıt
dosyalarını yeniden açar. Bunların ardından isteklere yanıt verecek yeni
kuşak çocukları oluşturmaya başlar.</p>
<p><module>mod_status</module> kullanıcıları bir <code>HUP</code> sinyalı
gönderildiğinde sunucu istatistiklerinin sıfırlandığı konusunda
uyarılırlar.</p>
<note>‘Nazikçe yeniden başlat’ komutundaki gibi yeniden başlatma öncesi
bir sözdizimi denetimi yapılır. Eğer yapılandırma dosyalarınızda
sözdizimi hatası varsa yeniden başlatma işlemi gerçekleşmez ve sözdizimi
hatalarıyla ilgili bildirim alırsınız.</note>
</section>
<section id="gracefulstop"><title>Nazikçe Durdur</title>
<dl><dt>Sinyal: WINCH</dt>
<dd><code>apachectl -k graceful-stop</code></dd>
</dl>
<p>Ana sürecin <code>WINCH</code> veya <code>graceful-stop</code>
sinyalini alması, çocuklara ellerindeki mevcut işleri bitirdikten sonra
(veya sundukları bir şey yoksa hemen) çıkmalarının <em>önerilmesine</em>
sebep olur. Ana süreç bunun hemen ardından <directive
module="mpm_common">PidFile</directive> dosyasını siler ve port
dinlemeyi keser. Ana süreç çalışmaya ve isteklere yanıt vermekte olan
çocuk süreçleri izlemeye devam eder. Tüm çocuklar işlerini bitirip
çıktığında veya <directive
module="mpm_common">GracefulShutdownTimeout</directive> ile belirtilen
zaman aşımı dolduğunda ana süreç de kendini sonlandırır. Eğer zaman aşımı
devreye girmişse o an çalışmakta olan çocuk süreçlere <code>TERM</code>
sinyali gönderilerek hemen çıkmaları sağlanır.</p>
<p>Bir <code>TERM</code> sinyali ile "graceful" durumundaki tüm çocuklar
ve ana süreç hemen sonlandırılacaktır. Bununla birlikte, <directive
module="mpm_common">PidFile</directive> dosyası da silineceğinden, artık
<code>apachectl</code> veya <code>httpd</code>’yi bu sinyali göndermek
için kullanamayacaksınız.</p>
<note><p><code>graceful-stop</code> sinyali, aynı anda, aynı yapılandırma
ile çok sayıda <program>httpd</program> kopyasının çalıştırılabilmesine
imkan verir. Bu, Apache nazikçe yükseltileceği zaman güçlü bir özellik
haline gelmekteyse de, bazı yapılandırmalarda yarış koşullarının
oluşmasına ve kısır çekişmelere (deadlock) sebep olabilir.</p>
<p>Sunucunun süreç kimliğini içeren kilit dosyaları (<directive
module="core">Mutex</directive>) ve Unix soket dosyaları
(<directive module="mod_cgid">ScriptSock</directive>) gibi dosyaların
disk üzerindeki mevcudiyetlerinin sorunsuz olarak devam ettiğinden emin
olunmaya çalışılmalıdır. Ayrıca, bir yapılandırma yönergesi, üçüncü
parti bir modül veya kalıcı CGI uygulamalarına ait disk kilit veya durum
dosyaları olabilir; <program>httpd</program>’nin birden fazla kopyasının
çalışması nedeniyle bu dosyaların da üzerine yazılmadığından emin
olunmaya çalışılmalıdır.</p>
<p><program>rotatelogs</program> tarzı borulu günlükleme kullanımı gibi
durumlarda yarış koşullarının oluşması olasılığına karşı uyanık
olunmalıdır. Aynı günlük kayıt dosyalarını aynı anda döndürmeye çalışan
birden fazla <program>rotatelogs</program> kopyasının çalıştırılması
halinde bunların her biri diğerlerinin günlük kayıt dosyalarının kaybına
sebep olabilir.</p></note>
</section>
</manualpage>
|