Systemctl Komutları: Linux’ta Hizmetleri Yeniden Başlatma, Yeniden Yükleme ve Durdurma
Hizmetleri verimli bir şekilde yönetmek, herhangi bir Linux sistem yöneticisi için en kritik becerilerden biridir. VPS Hosting planında yüksek trafikli bir web sunucusu çalıştırıyor olsanız veya bir Dedicated Server ortamını yönetiyor olsanız, systemctl kullanarak sistem hizmetlerini nasıl kontrol edeceğinizi anlamak kesinlikle gereklidir. Bu kapsamlı rehber, Linux’ta systemd ve systemctl kullanarak hizmetleri yeniden başlatma, yeniden yükleme ve durdurma hakkında bilmeniz gereken her şeyi kapsar.
systemd Nedir ve Neden Önemlidir?
systemd Ubuntu, Debian, CentOS, Rocky Linux, AlmaLinux ve Fedora dahil olmak üzere neredeyse tüm modern Linux dağıtımlarında kullanılan varsayılan init sistemi ve hizmet yöneticisidir. SysVinit ve Upstart gibi eski init sistemlerinin yerini aldı ve Linux’un önyükleme ve işlem yönetimi şeklinde önemli iyileştirmeler getirdi.
systemd’nin Temel Özellikleri
- Paralel hizmet başlatma — Hizmetleri eşzamanlı olarak başlatarak önyükleme sürelerini önemli ölçüde azaltır
- İsteğe bağlı hizmet aktivasyonu — Hizmetler yalnızca gerektiğinde başlatılabilir, sistem kaynaklarını korur
- Bağımlılık yönetimi — Hizmet bağımlılıklarını ve sıralamayı otomatik olarak yönetir
- Merkezi günlüğe kaydetme —
journaldile entegre olarak birleştirilmiş, yapılandırılmış günlük yönetimi sağlar - Cgroup tabanlı kaynak kontrolü — Hizmet başına CPU, bellek ve I/O kullanımını izler ve sınırlandırır
- Socket ve D-Bus aktivasyonu — Gelişmiş işlemler arası iletişim desenlerini etkinleştirir
systemd anlamak sadece akademik değildir — Linux ortamınızın istikrarını, performansını ve güvenliğini doğrudan etkiler.
systemctl Nedir?
systemctl systemd ile etkileşim kurmak için birincil komut satırı arayüzüdür. Yöneticilerin şunları yapmasına izin verir:
- Hizmetleri başlatma, durdurma, yeniden başlatma ve yeniden yükleme
- Önyüklemede hizmetleri etkinleştirme veya devre dışı bırakma
- Hizmet durumunu kontrol etme ve günlükleri görüntüleme
- Sistem hedeflerini yönetme (runlevels)
systemddaemon yapılandırmasını yeniden yükleme
Sistem durumunu değiştiren tüm systemctl komutları root ayrıcalıkları veya sudo erişimi gerektirir.
Hizmet Yönetimi için Temel systemctl Komutları
1. Bir Hizmeti Yeniden Başlatma
Bir hizmeti yeniden başlatmak onu tamamen durdurur ve ardından yeniden başlatır. Bu işlem şu durumlarda kullanılır:
- Tam bir işlem yeniden başlatması gerektiren yapılandırma değişiklikleri yaptığınızda
- Bir hizmet çöktüğünde veya yanıt vermez hale geldiğinde
- Paket yükseltmesinden sonra güncellenmiş ikili dosyaları uygulamanız gerektiğinde
Sözdizimi:
sudo systemctl restart <service_name>Örnek — Nginx web sunucusunu yeniden başlatın:
sudo systemctl restart nginxÖrnek — Apache web sunucusunu yeniden başlatın:
sudo systemctl restart apache2Örnek — MySQL/MariaDB veritabanını yeniden başlatın:
sudo systemctl restart mysql> Önemli: Bir hizmeti yeniden başlatmak kısa bir kesintiye neden olur. Üretim ortamları için, kapalı kalma süresini önlemek amacıyla desteklendiğinde reload kullanmayı düşünün.
2. Bir Hizmeti Yeniden Yükleme
Yeniden yükleme, çalışan bir hizmete yapılandırma dosyalarını işlemi durdurmadan yeniden okumasını söyler. Bu, yapılandırma değişikliklerini sıfır kapalı kalma süresiyle uygulamak için idealdir.
Sözdizimi:
sudo systemctl reload <service_name>Örnek — Nginx yapılandırmasını düzenledikten sonra yeniden yükleyin:
sudo systemctl reload nginxÖrnek — sshd_config değiştirdikten sonra SSH daemon’ını yeniden yükleyin:
sudo systemctl reload sshd> Not: Tüm hizmetler reload işlemini desteklemez. Bir hizmet bunu uygulamazsa, systemctl bir hata döndürecektir. Bu durumlarda, bunun yerine restart kullanın.
Pro İpucu — Maksimum uyumluluk için reload-or-restart kullanın:
sudo systemctl reload-or-restart <service_name>Bu komut önce yeniden yüklemeyi dener. Hizmet yeniden yüklemeyi desteklemiyorsa, otomatik olarak tam bir yeniden başlatmaya geri döner — bu, komut dosyası dağıtımları ve otomasyon için en güvenli seçenektir.
3. Bir Hizmeti Durdurma
Bir hizmeti durdurmak onu hemen sonlandırır. Bir hizmeti bakım, sorun giderme veya yeniden yapılandırma için çevrimdışı almak istediğinizde bunu kullanın.
Sözdizimi:
sudo systemctl stop <service_name>Örnek — Nginx web sunucusunu durdurun:
sudo systemctl stop nginxÖrnek — Güvenlik duvarı hizmetini durdurun:
sudo systemctl stop ufw> Uyarı: Kritik bir hizmeti (örneğin uzak bir sunucuda sshd) durdurmak sizi sisteminizden kilitleyebilir. Temel hizmetleri durdurmadan önce her zaman konsol veya bant dışı yönetim gibi alternatif bir erişim yönteminiz olduğundan emin olun.
4. Bir Hizmeti Başlatma
Bir hizmet şu anda çalışmıyorsa, onu başlatmak için start komutunu kullanın.
Sözdizimi:
sudo systemctl start <service_name>Örnek:
sudo systemctl start nginx5. Önyükleme Sırasında Bir Hizmeti Etkinleştirme
Bir hizmeti etkinleştirmek, systemd tarafından sistem önyüklemesi sırasında otomatik olarak başlatılması için gerekli sembolik bağlantıları oluşturur.
Sözdizimi:
sudo systemctl enable <service_name>Örnek:
sudo systemctl enable nginxAynı anda etkinleştirin ve başlatın (önerilir):
sudo systemctl enable --now nginx6. Önyükleme Sırasında Bir Hizmeti Devre Dışı Bırakma
Bir hizmeti devre dışı bırakmak, otomatik olarak başlamasını engeller, ancak şu anda çalışıyorsa onu durdurmaz.
Sözdizimi:
sudo systemctl disable <service_name>Örnek:
sudo systemctl disable bluetoothAynı anda devre dışı bırakın ve durdurun:
sudo systemctl disable --now bluetooth7. Hizmet Durumunu Kontrol Etme
status komutu, en sık kullanılan systemctl komutlarından biridir. Bir hizmetin durumunun gerçek zamanlı bir anlık görüntüsünü sağlar ve son günlük girişlerini içerir.
Sözdizimi:
sudo systemctl status <service_name>Örnek — Nginx’in durumunu kontrol edin:
sudo systemctl status nginxÖrnek çıktı:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2024-01-15 10:23:45 UTC; 2h 34min ago
Docs: man:nginx(8)
Process: 1234 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 1235 (nginx)
Tasks: 3 (limit: 4915)
Memory: 6.2M
CPU: 45ms
CGroup: /system.slice/nginx.service
├─1235 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
└─1236 "nginx: worker process"Çıktı şunları içerir:
- Loaded — Unit dosyasının yüklenip yüklenmediği ve önyüklemede etkinleştirilip etkinleştirilmediği
- Active — Geçerli çalışma durumu (
active (running),inactive (dead),failed, vb.) - Main PID — Hizmetin birincil işlem kimliği
- Memory/CPU — Kaynak tüketimi metrikleri
- CGroup — Kontrol grubu hiyerarşisi
- Recent logs — Hızlı tanı için son birkaç günlük girişi
Gelişmiş systemctl Komutları
Bir Hizmetin Etkin veya Etkinleştirilmiş Olup Olmadığını Kontrol Etme
Betiklerde ve otomasyon için kullanılmak üzere, bu komutlar basit boolean tarzı çıkış kodları döndürür:
# Check if a service is currently running
systemctl is-active nginx
# Check if a service is enabled at boot
systemctl is-enabled nginx
# Check if a service has failed
systemctl is-failed nginxTüm Hizmetleri Listeleme
# List all loaded and active units
systemctl list-units --type=service
# List all installed unit files and their states
systemctl list-unit-files --type=service
# List only failed services
systemctl --failedsystemd Daemon’ını Yeniden Yükleme
Unit dosyaları oluşturduktan veya değiştirdikten sonra, değişiklikleri tanımak için systemd daemon’ını yeniden yüklemeniz gerekir:
sudo systemctl daemon-reloadBir Hizmeti Maskeleme ve Maskelemesini Kaldırma
Bir hizmeti maskelemek, onu manuel olarak veya otomatik olarak başlatılmasını engeller — hatta diğer hizmetler tarafından da:
# Prevent a service from ever starting
sudo systemctl mask <service_name>
# Re-enable a masked service
sudo systemctl unmask <service_name>Hızlı Referans: systemctl Komut Kopya Kağıdı
| Komut | Açıklama |
|---|---|
systemctl start <service> | Durmuş bir hizmeti başlat |
systemctl stop <service> | Çalışan bir hizmeti durdur |
systemctl restart <service> | Bir hizmeti durdur ve yeniden başlat |
systemctl reload <service> | Yapılandırmayı durdurmadan yeniden yükle |
systemctl reload-or-restart <service> | Destekleniyorsa yeniden yükle, aksi takdirde yeniden başlat |
systemctl enable <service> | Hizmeti önyüklemede etkinleştir |
systemctl disable <service> | Hizmeti önyüklemede devre dışı bırak |
systemctl enable --now <service> | Etkinleştir ve hemen başlat |
systemctl disable --now <service> | Devre dışı bırak ve hemen durdur |
systemctl status <service> | Hizmet durumunu ve günlükleri göster |
systemctl is-active <service> | Hizmetin çalışıp çalışmadığını kontrol et |
systemctl is-enabled <service> | Hizmetin önyüklemede başlayıp başlamadığını kontrol et |
systemctl is-failed <service> | Hizmetin başarısız olup olmadığını kontrol et |
systemctl list-units --type=service | Tüm etkin hizmetleri listele |
systemctl --failed | Tüm başarısız hizmetleri listele |
systemctl daemon-reload | systemd birim dosyalarını yeniden yükle |
systemctl mask <service> | Hizmetin başlamasını tamamen engelle |
systemctl unmask <service> | Hizmetten maskesini kaldır |
Server Yöneticileri için Pratik Kullanım Örnekleri
Senaryo 1: Nginx Yapılandırma Değişikliklerini Uygulama
Web sunucunuzda /etc/nginx/nginx.conf dosyasını düzenlediniz. Etkin bağlantıları kesmeden değişiklikleri uygulamak için:
# First, test the configuration syntax
sudo nginx -t
# If the test passes, reload gracefully
sudo systemctl reload nginxSenaryo 2: Başarısız Bir Hizmeti Kurtarma
Bir hizmet çökmüş ve failed durumunu göstermektedir:
# Check what went wrong
sudo systemctl status myapp.service
# View full logs for the service
sudo journalctl -u myapp.service -n 50 --no-pager
# Restart the service
sudo systemctl restart myapp.serviceSenaryo 3: Dağıtımdan Sonra Yeni Bir Hizmet Kurma
Özel bir birim dosyası ile yeni bir uygulama dağıttıktan sonra:
# Reload systemd to recognize the new unit file
sudo systemctl daemon-reload
# Enable and start the service in one command
sudo systemctl enable --now myapp.service
# Verify it's running correctly
sudo systemctl status myapp.servicerestart, reload ve stop Arasındaki Fark — Bir Bakışta
| İşlem | İşlem Durduruldu mu? | Kapalı Kalma Süresi? | Kullanım Durumu |
|---|---|---|---|
stop | Evet | Evet | Bakım, sorun giderme |
restart | Evet, sonra yeniden başlatıldı | Kısa | Tam yeniden başlatma gerektiren yapılandırma değişiklikleri |
reload | Hayır | Yok | Sıfır kapalı kalma süresi ile yapılandırma değişiklikleri |
reload-or-restart | Gerekirse sadece | Minimal | Güvenli otomasyon ve komut dosyası oluşturma |
Farklı Hosting Ortamlarında Hizmetleri Yönetme
Bu kılavuzda ele alınan systemctl komutları, Linux tabanlı hosting ortamlarında evrensel olarak geçerlidir. cPanel ile VPS üzerinde hizmetleri yönetiyor olsanız veya bare-metal Dedicated Server üzerinde olsanız, systemd hizmet yönetimi için tutarlı ve güvenilir bir arayüz sağlar.
Web uygulamaları çalıştıran ekipler için, hizmetlerinizi uygun SSL/TLS şifrelemesiyle güvenli hale getirmek eşit derecede önemlidir. AlexHost, web hizmetlerinizi korumaya ve kullanıcı güvenini oluşturmaya yardımcı olmak için SSL Sertifikaları sunmaktadır — ve sertifikanız yüklendikten sonra, yeni yapılandırmayı kapalı kalma süresi olmadan uygulamak için basit bir sudo systemctl reload nginx veya sudo systemctl reload apache2 yeterlidir.
Yeni bir proje oluşturuyor ve güvenilir bir temel gerekiyorsa, daha küçük iş yükleri için Paylaşımlı Web Hosting ile başlamayı, ardından ihtiyaçlarınız büyüdükçe tam bir VPS veya dedicated sunucuya ölçeklendirmeyi düşünün.
Sonuç
systemctl komutlarında uzmanlaşmak, üretim ortamında Linux sunucularını yöneten herkes için temel bir gereksinimdir. Yeniden başlatma, yeniden yükleme ve durdurma işlemlerini verimli bir şekilde gerçekleştirme yeteneği — ve bu işlemler arasındaki farkı anlama — sisteminizin kullanılabilirliğini, performansını ve bakımlanabilirliğini doğrudan etkiler.
İşte temel çıkarımların hızlı bir özeti:
- Tam bir hizmet döngüsüne ihtiyaç duyduğunuzda
restartkullanın — işlemi durdurur ve yeniden başlatır - Hizmet bunu desteklediğinde sıfır kesinti süreli yapılandırma güncellemeleri için
reloadkullanın - Maksimum uyumluluk ve güvenlik için betiklerde
reload-or-restartkullanın - Planlı bakım için veya bir hizmetin çevrimdışı alınması gerektiğinde
stopkullanın - Değişikliklerden önce ve sonra sorunları teşhis etmek için her zaman
systemctl statusvejournalctlkullanın
Bu komutlar araç setinizde yer aldığında, istikrarlı, yüksek performanslı Linux ortamlarını korumak için iyi donanımlı olacaksınız — tek bir VPS yönetip yönetmediğiniz veya tüm özel sunucu filosunu yönetip yönetmediğiniz.
tasarruf edin