Systemd Nedir ve Linux’ta Nasıl Çalışır?

Linux sistemlerinde servislerin ve başlangıç işlemlerinin kontrolü geçmişte init, SysV ve Upstart gibi araçlarla gerçekleştirilirdi. Ancak zamanla bu yapıların yerini, daha modern ve kapsamlı bir sistem yöneticisi olan systemd almıştır. systemd, sistem başlangıcını hızlandırmasının yanı sıra servis, socket ve diğer kaynakların yönetiminden sorumludur. Bilgisayar açıldığında aktif hâle gelir ve hizmetleri belirlenen sırayla başlatır. Aynı zamanda oturumları, bağlama noktalarını (mount), swap alanlarını ve hedefleri organize eder. Bu yapı, özellikle Linux sanal sunucu ortamlarında kaynakların verimli kullanılmasını ve Linux CPU yükünün dengeli dağıtılmasını sağlamak açısından kritik bir rol oynar. systemctl, journalctl, loginctl, cgls, cgtop ve nspawn gibi araçlar aracılığıyla bu süreçler kontrol altına alınabilir. Böylece systemd, servislerin bağımlılıklarını göz önünde bulundurarak doğru şekilde çalışmasını sağlar.
Linux’ta Arkaplan Süreçleri (Daemon)
Linux sistemlerinde daemon adı verilen arkaplan süreçleri, sistem açıldığında otomatik olarak başlatılır ve kullanıcı müdahalesi olmaksızın çalışmaya devam eder. Örneğin sshd servisi, uzak bağlantılar için SSH erişimini sağlar ve sistem açık kaldığı sürece aktif kalır. Bu süreçlerin isimleri genellikle “d” harfi ile biter ve arka planda sessizce işlem yürütür.
- Daemon: Sistem açılışında devreye giren ve kullanıcı etkileşimi gerektirmeden çalışan servislerdir.
- Socket: Ağ veya yerel bağlantıları dinleyen iletişim noktalarıdır.
- Service: Genellikle birden fazla daemon’un sunduğu hizmetin genel adıdır.
Eski init tabanlı sistemlerde, çekirdek yüklendikten sonra PID 1 olarak init süreci başlar ve /etc/inittab dosyasını okuyarak sistemin hangi runlevel ile başlayacağını belirlerdi:
0: Sistemi durdur1: Tek kullanıcı kurtarma modu2–3: Ağsız ya da ağlı çok kullanıcı modu5: Grafik arayüzlü başlatma (X11)6: Sistemi yeniden başlat
systemd Unit Dosyaları ve Türleri
Systemd yapısı, “unit” olarak adlandırılan dosyalar aracılığıyla yapılandırılır. Her unit dosyası bir servis, mount noktası, hedef, zamanlayıcı ya da benzeri bir öğeyi tanımlar. Bu dosyalar genellikle /etc/systemd/system/ ya da /lib/systemd/system/ dizinlerinde yer alır.
En yaygın unit türleri şunlardır:
.service → Servisleri tanımlar
.socket → Socket’ler için yapılandırma içerir
.target → Birden çok servisin gruplandığı hedeflerdir
.mount → Disk bölümlerinin bağlanmasını tanımlar
.swap → Takas alanlarını yönetir

systemctl Komutları
Servisleri Başlatma ve Durdurma
Bir servisi başlatmak için start komutu kullanılır. Komut, sistemde değişiklik yapacağından sudo ile çalıştırılmalıdır.
sudo systemctl start application.service
Çalışmakta olan bir servisi durdurmak için stop komutu kullanılır:
sudo systemctl stop application.service
Servisi yeniden başlatmak için restart komutu verilir:
sudo systemctl restart application.service
systemctl Tüm Hizmetleri Listeleme
Sistemde şu anda çalışan ve yüklenmiş servisleri görmek için aşağıdaki komut kullanılabilir:
systemctl list-units
| Sütun Adı | Açıklama |
|---|---|
| BİRİM (UNIT) | Hizmetin tanımlı olduğu birim dosyasının adıdır. Hizmetin nasıl çalıştırılacağını belirler. |
| AÇIKLAMA (DESCRIPTION) | Hizmet hakkında kısa bilgi verir. |
| LOAD | Birim dosyasının belleğe yüklenip yüklenmediğini gösterir. |
| ACTIVE | Hizmetin şu anda aktif (çalışır) olup olmadığını belirtir. |
| SUB | Hizmetin alt durumunu gösterir. Örneğin: çalışıyor, durdu, hata verdi gibi. |
NOT: systemctl list-units komutu yalnızca aktif (çalışan) servisleri gösterir. Bu yüzden LOAD sütunu her zaman “loaded” olarak görünür.
Diğer, yani çalışmayan servisleri görmek için ekstra parametreler kullanmak gerekir.
systemctl ile Etkin Olmayan Hizmetleri Listeleme
Eğer sadece çalışmayan (durdurulmuş) servisleri görmek istiyorsanız, aşağıdaki komutu kullanabilirsiniz:
sudo systemctl list-units --type=service --state=inactive

systemctl ile Etkinleştirilmiş Hizmetleri Listeleme
Sistemde önyükleme sırasında otomatik olarak başlayan servisleri görmek için:
sudo systemctl list-unit-files --type=service --state=enabled

Klasik service ve chkconfig Komutlarına Alternatifler
| Geleneksel Komut | systemd Karşılığı | Açıklama |
|---|---|---|
| service sshd start | systemctl start sshd.service | Servisi başlatır |
| service sshd stop | systemctl stop sshd.service | Servisi durdurur |
| chkconfig sshd on | systemctl enable sshd.service | Açılışta başlatır |
| chkconfig sshd off | systemctl disable sshd.service | Açılışta başlatmaz |
| chkconfig –list | systemctl list-unit-files –type=service | Tüm servisleri listeler |
Sık Sorulan Sorular
Servisleri listelerken sadece çalışanları nasıl görebilirim?
systemctl list-units --type=service --state=active
.service uzantısı yazmadan komut çalışır mı?
Evet, systemctl komutları .service uzantısını otomatik olarak varsayar. Ancak netlik ve uyumluluk açısından uzantıyı yazmanız önerilir.
Varsayılan açılış hedefini (runlevel) nasıl öğrenebilirim?
systemctl get-default
Servisin sistem açılışında başlamasını nasıl sağlarım?
sudo systemctl enable servis_adi
systemd ile eski init sistemleri arasındaki fark nedir?
Eski sistemler sıralı çalışırken, systemd servisleri paralel başlatabilir, bağımlılık yönetimi yapabilir ve servis durumlarını daha etkili şekilde izleyebilir. Ayrıca journalctl ile birleşik bir günlükleme sistemi sunar.
Hangi dağıtımlar systemd kullanıyor?
Ubuntu, Debian, Fedora, CentOS, RHEL, SUSE, Arch Linux gibi birçok modern Linux dağıtımı artık varsayılan olarak systemd ile gelir.
Servis neden failed (başarısız) olur ve nasıl kontrol edilir?
Bir servis yapılandırma hatası, bağımlı servis eksikliği veya kaynak erişim problemi nedeniyle failed olabilir. Durumu görmek için:
systemctl status servis_adi