Apache HTTP Sunucusu Sürüm 2.4

Apache > HTTP Sunucusu > Belgeleme > Sürüm 2.4

# Apache HTTP Sunucusunun Durdurulması ve Yeniden Başlatılması

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 httpd’nin Bir Hizmet Olarak Çalıştırılması sayfasına, Windows 9x ve ME kullanıcıları ise httpd’nin Bir Konsol Uygulaması Olarak Çalıştırılması sayfasına bakabilirler.

### Ayrıca bakınız:

- `httpd`
- `apachectl`
- Başlatma

## Giriş

Apache HTTP Sunucusunu durdurmak ve yeniden başlatmak için çalışan `httpd` 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 `kill` komutunun kullanımıdır. Bu suretle, sisteminizde çalışmakta olan bir çok `httpd` sürecini uyarabilirsiniz ama süreç kimliği `PidFile` 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: `TERM`, `USR1`, `HUP` ve `WINCH`. Bunlar yeri geldikçe açıklanacaktır.

Ana sürece `kill` ile sinyal göndermek için şöyle bir komut verebilirsiniz:

`kill -TERM `cat /usr/local/apache2/logs/httpd.pid``

`httpd` süreçlerine sinyal göndermenin ikinci yolu `-k` komut satırı seçeneğini şu değerlerden biri ile kullanmaktır: `stop`, `restart`, `graceful` ve `graceful-stop`. Bunlar aşağıda açıklanacaktır. `-k` komut satırı seçeneği `httpd`’ye ait olsa da ana sürece bu sinyalleri göndermek için `apachectl` betiğini kullanmanızı öneririz. `apachectl`, komut satırı seçeneklerini `httpd`’ye aktaracaktır.

`httpd`’ye sinyal gönderdikten sonra olup biteni şu komutla izleyebilirsiniz:

`tail -f /usr/local/apache2/logs/error_log`

Bu örnekleri, kendi `ServerRoot` ve `PidFile` yönergelerinizdeki ayarlara uygun olarak değiştirdikten sonra kullanınız.

## Hemen Durdur

Sinyal: TERM
  `apachectl -k stop`

Ana sürece `TERM` veya `stop` 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.

## Nazikçe Yeniden Başlat

Sinyal: USR1
  `apachectl -k graceful`

Ana sürece `USR1` veya `graceful` sinyalinin gönderilmesi, çocuklara ellerindeki mevcut işleri bitirdikten sonra (veya sundukları bir şey yoksa hemen) çıkmalarının önerilmesi 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 kuşağından bir süreç başlatır ve hemen yeni isteklere hizmet sunulmaya başlanır.

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, `StartServers` yönergesinde şöyle davranılır: İlk saniye içinde en azından `StartServers` 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.

`mod_status` kullanıcıları `USR1` 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 çetele tutulur.

`mod_status` 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 `G` (Graceful’un baş harfi) kullanır.

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 `USR1` kullanarak bildirmenin bir yolu yoktur. Önerimiz, eski günlük kaydı üzerinde bir işlem yapmaya başlamadan önce `USR1` 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.

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.

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 `httpd`’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.

## Hemen Yeniden Başlat

Sinyal: HUP
  `apachectl -k restart`

Ana sürece `HUP` veya `restart` sinyalinin gönderilmesi tüm çocukların `TERM` 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.

`mod_status` kullanıcıları bir `HUP` sinyalı gönderildiğinde sunucu istatistiklerinin sıfırlandığı konusunda uyarılırlar.

‘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.

## Nazikçe Durdur

Sinyal: WINCH
  `apachectl -k graceful-stop`

Ana sürecin `WINCH` veya `graceful-stop` sinyalini alması, çocuklara ellerindeki mevcut işleri bitirdikten sonra (veya sundukları bir şey yoksa hemen) çıkmalarının önerilmesine sebep olur. Ana süreç bunun hemen ardından `PidFile` 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 `GracefulShutdownTimeout` 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 `TERM` sinyali gönderilerek hemen çıkmaları sağlanır.

Bir `TERM` sinyali ile "graceful" durumundaki tüm çocuklar ve ana süreç hemen sonlandırılacaktır. Bununla birlikte, `PidFile` dosyası da silineceğinden, artık `apachectl` veya `httpd`’yi bu sinyali göndermek için kullanamayacaksınız.

`graceful-stop` sinyali, aynı anda, aynı yapılandırma ile çok sayıda `httpd` 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.

Sunucunun süreç kimliğini içeren kilit dosyaları (`Mutex`) ve Unix soket dosyaları (`ScriptSock`) 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; `httpd`’nin birden fazla kopyasının çalışması nedeniyle bu dosyaların da üzerine yazılmadığından emin olunmaya çalışılmalıdır.

`rotatelogs` 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 `rotatelogs` 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.