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, systemd ve systemctl kullanarak Linux’ta 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 nasıl önyükleme yaptığı ve işlemleri yönettiği konusunda ö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 işler
- 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ırlar
- Socket ve D-Bus aktivasyonu — Gelişmiş işlemler arası iletişim modellerini 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 (runlevel’lar)
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. Hizmet Yeniden Başlatma
Hizmet yeniden başlatma, hizmeti tamamen durdurur ve ardından yeniden başlatır. Bu işlem şu durumlarda yapılır:
- Tam bir işlem yeniden başlatması gerektiren yapılandırma değişiklikleri yaptınız
- Bir hizmet çökmüş veya yanıt vermez hale gelmiş
- Paket yükseltmesinden sonra güncellenmiş ikili dosyaları uygulamanız gerekir
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: Hizmet yeniden başlatma 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. Hizmet 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’ı yeniden yükleyin:
sudo systemctl reload sshd> Not: Tüm hizmetler reload işlemini desteklemez. Bir hizmet bunu uygulamıyorsa, 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 yeniden başlatmaya geri döner — bu da betikli dağıtımlar ve otomasyon için en güvenli seçenektir.
3. Hizmet Durdurma
Hizmet durdurma, hizmeti hemen sonlandırır. Bir hizmeti bakım, sorun giderme veya yeniden yapılandırma için çevrimdışı almanız gerektiğinde 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 durdurmak (uzak sunucuda sshd gibi) sizi sisteminizin dışında bırakabilir. Temel hizmetleri durdurmadan önce, konsol veya bant dışı yönetim gibi alternatif bir erişim yönteminiz olduğundan her zaman emin olun.
4. Hizmet Başlatma
Bir hizmet şu anda çalışmıyorsa, start komutunu kullanarak başlatın.
Sözdizimi:
sudo systemctl start <service_name>Örnek:
sudo systemctl start nginx5. Önyüklemede Hizmet Etkinleştirme
Hizmet etkinleştirme, 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ştirme ve başlatma (önerilir):
sudo systemctl enable --now nginx6. Önyüklemede Hizmet Devre Dışı Bırakma
Hizmet devre dışı bırakma, otomatik başlatılmasını engeller, ancak şu anda çalışıyorsa durdurmaz.
Sözdizimi:
sudo systemctl disable <service_name>Örnek:
sudo systemctl disable bluetoothAynı anda devre dışı bırakma ve durdurma:
sudo systemctl disable --now bluetooth7. Hizmet Durumunu Kontrol Etme
status komutu, en sık kullanılan systemctl komutlarından biridir. Hizmetin durumunun gerçek zamanlı bir anlık görüntüsünü sağlar; son günlük girdileri de içerir.
Sözdizimi:
sudo systemctl status <service_name>Örnek — Nginx 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üketim metrikleri
- CGroup — Kontrol grubu hiyerarşisi
- Recent logs — Hızlı tanı için son birkaç günlük girişi
Gelişmiş systemctl Komutları
Hizmetin Etkin veya Etkinleştirilmiş Olup Olmadığını Kontrol Etme
Betikler ve otomasyon için kullanım, bu komutlar basit boole 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’ı Yeniden Yükleme
Unit dosyaları oluşturduktan veya değiştirdikten sonra, systemd daemon’ının değişiklikleri tanıması için yeniden yüklemeniz gerekir:
sudo systemctl daemon-reloadHizmet Maskeleme ve Maskeyi Kaldırma
Hizmet maskeleme, diğer hizmetler tarafından bile olsa manuel veya otomatik olarak başlatılmasını engeller:
# 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 Hile Sayfası
| Komut | Açıklama |
|---|---|
systemctl start <service> | Durmuş bir hizmeti başlat |
systemctl stop <service> | Çalışan bir hizmeti durdur |
systemctl restart <service> | Hizmeti durdur ve yeniden başlat |
systemctl reload <service> | Durdurmadan yapılandırmayı yeniden yükle |
systemctl reload-or-restart <service> | Destekleniyorsa yeniden yükle, aksi takdirde yeniden başlat |
systemctl enable <service> | Önyüklemede hizmeti etkinleştir |
systemctl disable <service> | Önyüklemede hizmeti 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 |
