Apache başlatma, durdurma ve yeniden başlatma: komutlar ve graceful farkı
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örev | RHEL ailesi (httpd) | Debian ailesi (apache2) |
|---|---|---|
| Başlatma | systemctl start httpd | systemctl start apache2 |
| Durdurma | systemctl stop httpd | systemctl stop apache2 |
| Yeniden başlatma | systemctl restart httpd | systemctl restart apache2 |
| Yapılandırmayı yeniden okuma (graceful) | systemctl reload httpd | systemctl reload apache2 |
| Durumu kontrol etme | systemctl status httpd | systemctl status apache2 |
| Açılışta otomatik başlatma | systemctl enable httpd | systemctl 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 apache2Unit 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 httpdstart, durmuş olan Apache'yi başlatır. Başlayıp başlamadığını systemctl status ile kontrol edin.
systemctl stop httpdstop, Apache'yi durdurur. Yeniden başlatana kadar web isteklerini kabul etmez.
systemctl restart httpdrestart, 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 httpdactiveÇ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 httpdenabledenabled, 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=mixedExecReload 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.
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 -tSyntax OKapachectl -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 httpdDenetimden 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.
🔢 SSS & önerilen içerikler
Apache · Yeniden başlatma hatası
Apache yeniden başlatma hatası | (20014)Internal error: Error retrieving pid file logs/httpd.pid
apachectl restart gibi komutlarda pid dosyası hatasının nedeni ve boş httpd.pid dosyasını temizleme adımları.
Apache · php-fpm
php-fpm max_children uyarısı: Worker artırmadan önce nedeni kayıtlardan bulun
Nginx, Apache ve php-fpm yapısındaki bir WordPress sunucusunda max_children uyarılarının birikme nedenini loglarla bulduğumuz kayıt.
ℹ️ 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.