Apache başlatma, durdurma ve yeniden başlatma: komutlar ve graceful farkı

Test ortamıRHEL ailesiAlmaLinux 9.8root hesabı2026-10-29 tarihinde kontrol edildi

Linux sunucuda Apache'yi başlatma, durdurma ve yeniden başlatma işlemleri systemctl komutuyla yapılır; servis adı RHEL ailesinde httpd, Debian ailesinde apache2'dir. Bir AlmaLinux 9 sunucusunda systemctl status çıktısını, httpd unit dosyasını ve apachectl betiğini okuduğumuzda, restart'ın Apache'yi kapatıp yeniden açtığını, graceful'ın ise üst süreci olduğu gibi bırakıp yalnızca yapılandırmayı yeniden okuduğunu gördük.

Durdurma ve yeniden başlatma servisi gerçekten durdurduğu için test sunucusunda start, stop ve restart komutlarını çalıştırmadık. Bunun yerine davranışı Apache resmi belgeleri, httpd.service kılavuzu ve sunucuda kalan reload kayıtlarıyla doğruladık. Aşağıdaki çıktıdaki ana makine adı, port numarası, saatler ve istek sayıları örnek değerlerdir.

1️⃣ Apache başlatma, durdurma ve yeniden başlatma komutları

Apache'nin servis adı dağıtım ailesine göre değişir. RHEL, AlmaLinux ve Rocky Linux gibi RHEL ailesi onu systemd'ye httpd adıyla, Ubuntu ve Debian ise apache2 adıyla kaydeder.

GörevRHEL ailesi (httpd)Debian ailesi (apache2)
Başlatmasystemctl start httpdsystemctl start apache2
Durdurmasystemctl stop httpdsystemctl stop apache2
Yeniden başlatmasystemctl restart httpdsystemctl restart apache2
Yapılandırmayı yeniden okuma (graceful)systemctl reload httpdsystemctl reload apache2
Durumu kontrol etmesystemctl status httpdsystemctl status apache2
Açılışta otomatik başlatmasystemctl enable httpdsystemctl enable apache2

Tablodaki komutları root hesabıyla çalıştırın. Normal bir hesaptaysanız komutun başına sudo ekleyin.

Aileleri karıştırıp diğer adı yazarsanız komut çalışmaz. RHEL ailesinden bir sunucuda durumu apache2 adıyla sorduğumuzda, unit'in bulunamadığını söyleyen bir hata çıktı.

systemctl status apache2
Unit apache2.service could not be found.

Bu sırada çıkış kodu 4'tü ve aynı sunucuda adı httpd olarak değiştirince normal çıktı geldi.

RHEL ailesinde Apache'yi aşağıdaki üç komutla başlatır, durdurur ve yeniden başlatırsınız.

systemctl start httpd

start, durmuş olan Apache'yi başlatır. Başlayıp başlamadığını systemctl status ile kontrol edin.

systemctl stop httpd

stop, Apache'yi durdurur. Yeniden başlatana kadar web isteklerini kabul etmez.

systemctl restart httpd

restart, stop ve start komutlarını sırayla çalıştırır. Yalnızca yapılandırma dosyalarını değiştirdiyseniz bunları bağlantıları kesmeyen reload (graceful) ile uygulayın.

AlmaLinux 9'daki apachectl, Apache'nin dağıttığı apachectl yerine kurulmuş bir kabuk betiğidir. start, stop, restart ve status aldığında bunları olduğu gibi systemctl'ye ilettiği için apachectl restart ile systemctl restart httpd aynı işi yapar.

2️⃣ Apache servis durumunu kontrol etme

Apache'nin şu anda çalışıp çalışmadığını ve ne zaman başladığını systemctl status ile kontrol edin.

systemctl status httpd
● httpd.service - The Apache HTTP Server
     Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; preset: disabled)
     Active: active (running) since Sat 2026-10-17 08:30:49 UTC; 1 week 4 days ago
       Docs: man:httpd.service(8)
    Process: 2930107 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS)
   Main PID: 741 (httpd)
     Status: "Total requests: 52418; Idle/Busy workers 75/0;Requests/sec: 0.0528; Bytes served/sec: 3.9KB/sec"
      Tasks: 224 (limit: 4615)
     Memory: 184.3M (peak: 593.8M)
        CPU: 47min 33.944s
     CGroup: /system.slice/httpd.service
             ├─    741 /usr/sbin/httpd -DFOREGROUND
             ├─2930111 /usr/sbin/httpd -DFOREGROUND
             ├─2930143 /usr/sbin/httpd -DFOREGROUND
             └─2930144 /usr/sbin/httpd -DFOREGROUND

Oct 28 15:00:00 server systemd[1]: Reloading The Apache HTTP Server...
Oct 28 15:00:00 server systemd[1]: Reloaded The Apache HTTP Server.
Oct 28 15:00:00 server httpd[741]: Server configured, listening on: port 80

[Active] satırındaki active (running) şu anda çalıştığı anlamına gelir; since'ten sonraki saat de başladığı zamandır. Bu sunucu 11 gün önce başladıktan sonra hiç durmamıştı ve [Main PID] 741 o sırada başlayan üst süreçti.

[CGroup] bölümünde 741'in altında sıralananlar, istekleri gerçekten işleyen alt süreçlerdir (bkz. Süreçler). [Status] satırında şimdiye kadar işlenen istek sayısı ile boşta ve çalışan worker sayıları görünür.

Çıktının en altındaki üç log satırı, her gün aynı saatte kalan reload kayıtlarıydı: logları tarihe göre bölen logrotate, rotasyonu bitirdikten sonra systemctl reload httpd çalıştırmıştı; httpd.service kılavuzunda da logrotate'ten sonra httpd'nin reload edildiği yazar.

Betiklerde ve kontrol komutlarında tek bir kelime yazdıran is-active ve is-enabled kullanılır.

systemctl is-active httpd
active

Çalışırken active ve çıkış kodu 0 geldi. Sunucuda olmayan apache2 yazıldığında da durmuş bir servisle aynı şekilde inactive ve çıkış kodu 3 geldiği için, betiklerde önce servis adının doğru olup olmadığını kontrol edin.

systemctl is-enabled httpd
enabled

enabled, Apache'nin açılışta otomatik başlaması için kaydedildiği durumdur.

3️⃣ Apache yeniden başlatma ile graceful farkı

restart ve graceful (reload), işlenmekte olan isteklere ve üst sürece farklı davranır. Bu farkı önce httpd unit dosyasında reload ve stop için kullanılan satırlarda doğruladık.

systemctl cat httpd | grep -E "Exec|Kill"
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
KillSignal=SIGWINCH
KillMode=mixed

ExecReload satırı, reload alındığında httpd -k graceful çalıştırıldığı anlamına gelir; KillSignal satırı da stop sırasında gönderilen sinyalin SIGWINCH (graceful-stop) olduğu anlamına gelir.

Bu yüzden systemctl restart httpd, Apache'yi graceful-stop ile durdurur ve ardından yeniden başlatır. İşlenmekte olan istekler bitirildikten sonra kapanır, ancak üst süreç de yeniden başladığı için [Main PID] numarası değişir. Durdurma ile başlatma arasında port kapalıdır ve yeni bağlantılar kabul edilmez. Debian paketindeki apache2.service unit dosyası da durdururken apachectl graceful-stop çalıştırır.

httpd -k restart üst sürece HUP sinyali gönderir. Apache resmi belgelerine göre üst süreç yerinde kalır, ancak alt süreçleri hemen sonlandırdığı için işlenmekte olan istekler kesilir ve istek istatistikleri de 0'a döner.

graceful üst sürece USR1 sinyali gönderir. Üst süreç yapılandırma dosyalarını yeniden okur; her alt süreç de işlediği isteği bitirdiği sırayla yeni yapılandırmalı bir alt süreçle değiştirilir. Bu arada gelen bağlantıları işletim sistemi bekletir, bu yüzden kaybolmazlar.

Açık olan bir dükkânın kapısını kapatmadan, her kasiyerin müşterisiyle işini bitirdiği sırayla yeni vardiya çizelgesindeki bir çalışana yerini devretmesi gibidir.

🔁 Apache'yi yeniden başlatmanın üç yolunda neler değişir
Açıklama diyagramı
🔁 Komut
$ systemctl restart httpdhttpd -k restartsystemctl reload httpd
① Üst süreç (Main PID)Kapanıp yeniden başlarMain PID numarası değişir.değişmezHUP sinyalini alır ve yapılandırma dosyalarını yeniden okur.değişmezUSR1 sinyalini alır ve yapılandırma dosyalarını yeniden okur.
② İşlenmekte olan isteklerBitirilir, sonra kapanırDurdurma graceful-stop (WINCH) olduğu için işlenmekte olan istekler bitirilir.Hemen kesilirAlt süreçleri hemen sonlandırır ve yeni alt süreçler başlatır.Sonuna kadar işlenirHer alt süreç isteğini bitirdiğinde yeni yapılandırmalı bir alt süreçle değiştirilir.
③ Yeni gelen bağlantılarYeniden başlayana kadar kabul edilmezDururken portu kapatır.Yeni alt süreçler başlayınca işlenirPortu açık tutar ve yeni alt süreçler başlayınca işler.KesilmezPortu açık tutar, böylece işletim sistemi bağlantıları bekletir.
systemctl restart httpd Apache'yi durdurup yeniden başlattığı için üst süreç de yeniden başlar ve bu arada yeni bağlantılar kabul edilemez.
httpd -k restart üst sürece HUP sinyali gönderip alt süreçleri hemen sonlandırdığı için işlenmekte olan istekler kesilir.
systemctl reload httpd ve apachectl graceful üst süreci olduğu gibi bırakır ve alt süreçleri istekleri bittiği sırayla değiştirir.

Bu farkı Main PID ile doğruladık. reload her gün çalıştığı hâlde Main PID 741 ve Active saati 11 gün önceki gibi kalmıştı; alt süreç numaraları (2930111 vb.) da son reload'u çalıştıran [Process] satırındaki 2930107'nin hemen ardından geliyordu.

systemctl reload httpd, apachectl graceful ve httpd -k graceful hepsi aynı graceful'dır. AlmaLinux 9'daki apachectl graceful aldığında systemctl kill ile üst sürece SIGUSR1 gönderir; başına -k eklenmiş apachectl -k graceful da -k'yi atıp aynı işi yapar.

graceful yalnızca yapılandırmayı yeniden okuduğu için httpd paketini güncelledikten sonra uygun değildir. httpd.service kılavuzuna göre güncellenen bir modül yalnızca yeni httpd'de olan bir özelliği kullanıyorsa reload güvenli değildir; bu yüzden httpd paketi güncellenirken Apache'yi systemctl try-restart ile otomatik olarak yeniden başlatır.

4️⃣ Apache yapılandırma söz dizimi denetimi

Bağlantıları kesmemek için değişiklikleri graceful ile uygulasanız bile, yapılandırma dosyasında yazım hatası varsa Apache yeni yapılandırmaya geçmez. Apache resmi belgelerine göre restart ve graceful çalışmadan önce söz dizimi denetimi yapar; hata varsa yalnızca hata mesajı verir ve yeniden başlatmaz.

Bu yüzden yapılandırmayı düzelttikten sonra önce apachectl -t ile söz dizimini denetleyin.

apachectl -t
Syntax OK

apachectl -t çalıştırıldığında tek satırlık Syntax OK çıktı; apachectl configtest ile çalıştırınca da sonuç aynıydı. RHEL ailesindeki apachectl, -t aldığında httpd -t'yi olduğu gibi çalıştırır.

Bir yönerge adı yanlış yazılmış deneme yapılandırma dosyasını denetlediğimizde, Syntax OK yerine AH00526 hatasıyla birlikte kaçıncı satır olduğu ve hangi yönergenin tanınmadığı ([Invalid command 'DirectoryIndx']) çıktı; çıkış kodu 1'di. Hata mesajındaki satırı düzeltip yeniden denetleyin.

systemctl reload httpd

Denetimden geçerse yapılandırmayı reload ile uygulayın. Apache resmi belgelerine göre söz dizimi denetimi yalnızca söz dizimine baktığı için, geçse bile uygulama başarısız olabilir. reload'dan sonra systemctl status'un [Active] satırını ve en alttaki logları bir kez daha kontrol edin.

🔲 Apache komut simülatörü

Aşağıdaki simülatörün sanal sunucusunda systemctl, apachectl ve httpd -k komutlarını kendiniz yazabilirsiniz. reload'dan sonra Main PID aynı kalır ve yalnızca alt süreç numaraları değişir. restart'tan sonra Main PID de yeni bir numaraya geçer.

Apache komut simülatörüRHEL ailesi httpd
[root@server work]#
Klavyedeki ↑↓ tuşlarıyla daha önce yazdığınız komutları geri çağırabilirsiniz.

🔢 SSS & önerilen içerikler

AlmaLinux 9'da apachectl fullstatus yazdığımızda fullstatus seçeneğinin desteklenmediğini söyleyen bir hata (not supported) ve çıkış kodu 2 çıktı. RHEL ailesindeki apachectl, Apache'nin dağıttığı apachectl yerine kurulmuş bir betik olduğu için yalnızca start, stop, restart, status, graceful, graceful-stop, configtest, -t ve -v kabul eder.

httpd.service kılavuzuna göre httpd unit'i varsayılan olarak kapalıdır (disabled); systemctl status'un [Loaded] satırında görünen preset: disabled bu varsayılan değerdir. systemctl enable httpd komutunu bir kez çalıştırırsanız her açılışta başlar; enable'a --now eklerseniz hemen de başlar.

httpd.service kılavuzuna göre root kabuğunda httpd'yi doğrudan çalıştırırsanız servis systemd dışında başlar ve SELinux gibi varsayılan güvenlik kısıtlamaları uygulanmaz. Bu yüzden başlatma ve durdurmayı systemctl veya apachectl ile yapın; httpd komutunu yalnızca -t söz dizimi denetimi gibi servisi başlatmayan seçenekler için kullanın.

ℹ️ Satış ortaklığı bildirimi
Bu sitenin içeriklerinde satış ortaklığı bağlantıları bulunur. Bir ziyaretçi bu bağlantılar üzerinden ürün veya hizmet satın alırsa bu site satıcıdan komisyon alır. Bu süreçte alıcının ödediği tutar (kampanya indirimlerinde tutar düşer↓) artmaz. Yayımlanan fiyat, indirim ve stok bilgileri yazının yazıldığı zamana aittir ve gerçek durumdan farklı olabilir; bu yüzden satın almadan önce son bilgiyi satıcıdan kontrol etmenizi rica ederiz. Ürünler kendi ölçütlerimize göre seçilir ve değerlendirilir; komisyon alınıp alınmaması tanıtım sırasını veya değerlendirme içeriğini etkilemez.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

İnsan olduğunuzu kanıtlayın: 8   +   4   =