İçeriğe geç
Yeni yazı çıkınca e-posta · 4.812 abone 190 rehber · 78 ipucu · 58 komut RSS GitHub LinkedIn İletişim
Ara Ctrl K Bültene katıl
Tüm arşiv · 190 rehber →
Tüm araçlar · 75 üreteç →
Linux Sunucu

systemd nedir? Linux'ta ilk süreç ne iş yapar

Unit türleri, hedefler, bağımlılık çözümü, journald ve systemd'nin neden yalnızca bir başlatma sistemi olmadığı.

Mustafa Çelik 25 Ağustos 2026 · 5 dk okuma

Bir Linux sunucusu açıldığında çekirdek yüklenir ve ardından tek bir kullanıcı süreci başlatır: PID 1. Bu süreç, geri kalan her şeyi ayağa kaldırmaktan sorumludur. Çoğu dağıtımda o süreç systemd’dir.

Neden eskisinin yerini aldı

Eski başlatma sistemleri servisleri sırayla başlatırdı: her betik bitene kadar sonraki beklerdi. Açılış süresi, en yavaş halkanın toplamıydı.

systemd bunu iki fikirle değiştirdi. Birincisi paralellik: bağımlılığı olmayan servisler aynı anda başlatılır. İkincisi soket etkinleştirme: bir servisin dinleyeceği soket önceden açılır, ona bağlanmak isteyen istemci beklerken servis arka planda başlar.

Sonuç, açılış süresinin belirgin biçimde kısalmasıdır. Ama asıl değişiklik kapsamdadır — systemd yalnızca servis başlatmaz; günlükleme, zamanlanmış görev, oturum ve aygıt yönetimini de üstlenir. Tartışmaların kaynağı da budur.

Unit: her şey bir birimdir

systemd’nin yönettiği her şey bir unit olarak tanımlanır ve uzantısı türünü söyler.

.service bir arka plan sürecidir. .socket bir dinleme noktasıdır. .timer zamanlanmış bir iştir. .mount bir bağlama noktasıdır. .target ise diğerlerini gruplayan bir toplama noktasıdır.

Bu tekdüzelik pratik bir kazanç sağlar: aynı komutlarla hepsini yönetirsiniz. Durum sorgulamak, başlatmak, durdurmak ve açılışta etkinleştirmek her tür için aynıdır.

Kendi servisinizi yazarken yapılan tipik hatalar systemd servisini doğru yazmak rehberinde ele alınıyor.

Hedefler: çalışma düzeylerinin yerine

Eski sistemlerdeki sayısal çalışma düzeylerinin yerini hedefler aldı.

multi-user.target grafik arayüzsüz, ağa bağlı normal sunucu durumudur. graphical.target masaüstü ortamını da kapsar. rescue.target tek kullanıcılı kurtarma kipidir.

Hedefler birbirini kapsayabilir; grafik hedefi çok kullanıcılı hedefi içerir. Sistemin hangi hedefe ulaşmaya çalıştığı, hangi servislerin başlatılacağını belirler.

Bağımlılık ve sıra ayrı şeylerdir

Bu ayrım en çok karışan noktadır ve yanlış anlaşıldığında açılışta çözülemeyen sorunlar üretir.

After= yalnızca sıra belirtir: her ikisi de başlatılacaksa önce diğeri başlar. Ama diğeri hiç başlatılmayacaksa sizinki yine de başlar.

Requires= ve Wants= ise bağımlılık kurar: diğerinin de başlatılmasını ister. Requires= katıdır — bağımlılık başarısız olursa sizinki de durdurulur. Wants= gevşektir.

Pratikte ikisi birlikte yazılır. Yalnızca Requires= yazmak, bağımlılığın başlatılmasını ister ama bitmesini beklemez; klasik bir yarış koşulu kaynağıdır.

Ağ hazır mı, ağ yönetimi hazır mı

Aynı ailede ikinci bir tuzak vardır. network.target, ağ yönetiminin başladığını söyler — bir IP adresi alındığını değil.

Açılışta bir veritabanına bağlanmaya çalışan servis network.target beklerse bağlantı reddedilebilir. Gerçekten adres beklemek için network-online.target gerekir; o da ilgili bekleme servisinin etkin olmasına bağlıdır.

Belirti tanıdıktır: servis elle başlatınca çalışır, makine yeniden başlayınca çalışmaz.

Günlükler: journald

systemd kendi günlük sistemini getirir. Çıktılar metin dosyalarına değil, yapılandırılmış bir günlüğe yazılır; her satır hangi birimden, hangi süreçten ve hangi öncelikle geldiği bilgisini taşır.

Bu, metin aramaktan daha güçlü sorgulamayı mümkün kılar — birime, önceliğe, zamana ya da süreç kimliğine göre süzebilirsiniz.

Kritik bir öntanımlı ayar vardır: /var/log/journal dizini yoksa günlükler bellekte tutulur ve yeniden başlatmada silinir. Sunucu neden yeniden başladığını anlatacak kayıt, yeniden başlarken kaybolur. Kalıcılığın nasıl açılacağı ve arıza arama sırası journalctl ile arıza bulmak rehberinde.

Timer: cron’un yerine

Zamanlanmış işler için .timer birimleri kullanılabilir ve cron’a göre üç kazanç sağlar.

Çıktı journald’ye gider — kaybolmaz. İş bir servis olduğu için durumu normal komutlarla sorgulanır. Ve makine kapalıyken kaçırılan çalışma, açılışta telafi edilebilir.

Ayrıca rastgele gecikme tanımlanabilir; onlarca makinenin aynı saniyede aynı sunucuya yüklenmesini engeller.

Yalıtım: az bilinen güçlü taraf

systemd, bir servisi çekirdek düzeyinde kısıtlayabilir. Dosya sistemini salt okunur yapmak, geçici dizini yalıtmak, yetki yükseltmeyi engellemek ve kullanılabilecek ağ ailelerini sınırlamak birkaç satırla mümkündür.

Bu, çoğu serviste dokunmadan eklenebilir ve ele geçirilen bir sürecin yapabileceklerini belirgin biçimde daraltır. Sıkılığı ölçmek için yerleşik bir güvenlik analizi komutu vardır ve eksik ayarları satır satır listeler.

Aynı disiplinin yapılandırma tarafındaki karşılığı yapılandırma yönetiminde idempotans yazısında.

Kısaca

systemd, PID 1 olarak çalışan ve sistemin tamamını birim kavramı üzerinden yöneten bir başlatma ve hizmet yöneticisidir.

Öğrenilmesi gereken üç şey vardır: unit dosyasının nasıl yazıldığı, sıra ile bağımlılığın farkı, ve günlüklerin kalıcı olup olmadığı. Üçü bilindiğinde geri kalanı komut ezberinden ibarettir.

Mustafa Çelik

Altyapı ve Operasyon Müdürü, İstanbul. 25 yıldır BT altyapısı, sistem yönetimi ve ağ altyapısıyla uğraşıyor; öğrendiklerini bu blogda üretim ortamında denenmiş rehberlere çeviriyor.

Hakkımda

Bu rehber işinize yaradıysa, sonrakini kaçırmayın.

Yeni yazı yayınlandığında tek e-posta. Takvim yok, dilediğiniz an çıkabilirsiniz.

Bülten sağlayıcısı henüz bağlanmadı. Bağlanana kadar e-posta ile yazabilirsiniz ya da RSS akışını takip edebilirsiniz.