---
title: 'Servis Yöneticisi Modeli'
source: 'https://academia.sh/tr/kurslar/sistem-yonetimi/servis-yoneticisi-modeli'
course: 'Sistem Yönetimi'
language: tr
updated: '2026-08-17T18:10:05+00:00'
license: 'CC BY-SA 4.0'
---

# Servis Yöneticisi Modeli

Birim, hedef ve bağımlılık kavramları kurulur; birim listesinin verdiği tanı ile bağımlılık çizgesinin verdiği tanı dört ayrıntı düzeyinde karşılaştırılır ve yanlış tanı sayılır.

Süreç yönetimi konusu tek tek süreçlere baktı: hangisi gerçekten ağır, hangisi sonlandırma
isteğine yanıt veriyor, hangisi konulan kaynak sınırına takılıyor. Bir sunucudaki süreçlerin
çoğunu ise operatör başlatmaz. Makine açılır, başında kimse yokken onlarca program ayağa kalkar,
biri çökerse yerine yenisi konur, sabah bakıldığında her şey yerli yerinde görünür. Bunu yapan
şey bir **servis yöneticisi**dir ve yönettiği nesne sürecin kendisi değil, sürecin tanımıdır.

Bu ders o tanımı ve tanımların arasındaki grafiği kurar. Sorusu şudur: yöneticinin bastığı liste,
sistemin gerçek yapısını ne kadarıyla gösterir? Liste altı satır basar ve altı satırın hepsi
doğrudur. Ölçülen şey, o altı doğru satırdan çıkarılan tanının kaç kez yanlış olduğudur.

## Birim, Hedef ve İki Tür Kenar

Servis yöneticisinin yönettiği nesneye **birim** (service unit) denir. Birim bir metin dosyasıdır:
hangi programın hangi kullanıcıyla çalıştırılacağını, çalışmazsa ne yapılacağını ve hangi başka
birimlere ihtiyaç duyduğunu söyler. Yönetici bu dosyaları okur, aralarındaki ilişkiyi bir grafiğe
çevirir ve grafiği izleyerek süreçleri başlatır. Bu ayrım kursun geri kalanını taşır: **birim
dosyası diskte durur, süreç bellekte koşar.** Dosyayı değiştirmek koşan süreci değiştirmez, süreci
öldürmek dosyayı silmez, birim "yüklü" olup hiç çalışmamış olabilir.

Servis dışında başka birim türleri de vardır ve hepsi aynı grafikte durur: takma noktasını
temsil eden birim, ağ yuvası dinleyip gelen bağlantıda bir servisi uyandıran birim, zamanlanmış
görevi taşıyan birim, bir dosya yolunu gözleyen birim. Bu konu yalnız servis birimlerini ölçer;
diğer türler adlandırılır ve geçilir.

Birimleri tek tek saymak yerine öbek olarak anmak gerektiğinde **hedef** (target) kullanılır. Hedef
kendisi bir iş yapmaz, bir süreç başlatmaz; bir isimdir ve altında toplanmış birimleri temsil eder.
"Ağ hazır", "çok kullanıcılı sistem hazır", "kapanış" gibi aşamalar hedeflerle adlandırılır.
Bir hedefe geçmek, altındaki birimleri etkinleştirmek demektir. Hedefin iş yapmaması, bir hedefe
"ulaşıldı" bildiriminin ne kadar bilgi taşıdığı sorusunu doğurur; bu soru önyükleme dersinde
ölçülür.

Grafikteki kenarlar iki türlüdür ve karıştırılmaları bu dersin ölçtüğü hatadır. **Gerektirme
kenarı**, bir birimin başka bir birim olmadan işe yaramayacağını söyler: gereken birim durursa
gerektiren birim de durur. **Sıralama kenarı** ise yalnız zaman söyler: bu birim şundan sonra
başlasın. Sıralama kenarı bağımlılık kurmaz. İki birim arasında sıralama olup gerektirme
olmayabilir, gerektirme olup sıralama olmayabilir. Komut adları ve birim dosyası sözdizimi servis
yöneticisine ve dağıtıma göre değişir; buradaki model yaygın davranışı anlatır.

Gerektirmenin bir de zayıf biçimi vardır ve adı **isteme**dir: istenen birim başlatılmaya
çalışılır, başlatılamazsa isteyen birim yine de çalışmaya devam eder. Zayıf kenar, çökme
yayılmasını durdurduğu için yaygın olarak tercih edilir; karşılığında grafikteki bir kenarın
kırılmasını sessizleştirir. Kurgu sunucunun grafiğinde zayıf kenar yoktur, çünkü bu dersin ölçtüğü
karıştırma sıralama ile gerektirme arasındadır. Üç kenar türünün de aynı ağaçta, aynı biçimde
basılması bir sonraki bölümün konusudur.

Süreçlerin birbirinden yalıtılması, kaynak muhasebesinin çekirdek tarafında nasıl tutulduğu ve
denetim grubu ile ad alanı mekanizmaları **bu kursta anlatılmaz**; bunlar M03/K05 Çekirdek
Arayüzleri ve İzolasyon kursuna bırakılmıştır. Burada birim, yöneticinin muhasebe defterindeki bir
kayıttır.

Yöneticinin grafiğe ihtiyaç duymasının nedeni yalnız muhasebe değildir. Grafik olmadan birimleri
sırayla, birbirini bekleterek başlatmak gerekir; grafikle birlikte, aralarında kenar bulunmayan
birimler aynı anda başlatılabilir. Bu ayrım önyükleme süresini belirler ve `04` dersinde katman
katman sayılır.

## Kurgu Sunucunun Birim Grafiği

Kurs boyunca aynı kurgu sunucu kullanılır. Altı birimi vardır: `veri-alma` dışarıdan veri alır,
`kuyruk` aldığı veriyi biriktirir, `isleme` kuyruktan okur, `rapor` işlenmiş veriden çıktı üretir,
`olcum` veri alma hattının sayaçlarını toplar, `yedek` ise kimseye bağlı olmadan çalışır.

**SV1 — birim bir tanımdır**, çalışan sürecin kendisi değil. **SV2 — gerektirme kenarı geçişlidir:**
`rapor` `isleme`'yi gerektiriyor ve `isleme` `kuyruk`'u gerektiriyorsa `rapor` dolaylı olarak
`kuyruk`'a da bağlıdır. **SV3 — sıralama kenarı geçişli sayılmaz** ve bağımlılık üretmez. **SV4 —
`rapor` yalnız `yedek`'ten sonra başlar** ama onu gerektirmez; **SV5 — `olcum` yalnız `kuyruk`'tan
sonra başlar** ama onu gerektirmez. **SV6 — grafik döngüsüzdür.** **SV7 — bir birimi durdurmak,
onu gerektiren bütün birimleri durdurur.** **SV8 — grafikte zayıf isteme kenarı yoktur;** yalnız
gerektirme ve sıralama vardır. **SV9 — bütün birimler aynı yöneticiye aittir** ve tek makinededir;
uzaktaki bir düğüme uzanan kenar yoktur. **SV10 — ölçüm boyunca grafik değişmez;** birim dosyası
eklenmez, silinmez ve yeniden okunmaz.

Bu varsayımların sonuncusu gerçek bir sistemde her zaman tutmaz ve tutmadığında ne olduğu ileride
ayrıca ele alınır. Ölçünün geri kalanı sabit bir grafiğe dayanır: kâhin, bu grafiğin kendisidir.

Yöneticinin birim listesi grafiği göstermez; birimleri alfabetik sırayla, her birini tek satırda
basar. Aşağıdaki döküm bu makinede çalıştırılmamıştır, biçimi göstermek için yazılmış bir
örnektir:

```text
UNIT               LOAD    ACTIVE   SUB      DESCRIPTION
isleme.service     loaded  active   running  Isleme birimi
kuyruk.service     loaded  active   running  Kuyruk birimi
olcum.service      loaded  active   running  Olcum toplayici
rapor.service      loaded  active   running  Rapor ureteci
veri-alma.service  loaded  active   running  Veri alma birimi
yedek.service      loaded  active   running  Yedek gorevi
```

Altı satır, altı birim, sıfır kenar. Bu listeye bakan operatörün elindeki tek bilgi hangi
birimlerin var olduğudur. "Şu birimi durdurursam ne olur" sorusunun cevabı listede yoktur ve
listeden çıkarılamaz.

## Grafiği Basan Komut ve Bastığı Yön

Servis yöneticileri bağımlılıkları ağaç biçiminde basan bir komut sunar. Bu komutun iki yönü
vardır ve ikisi farklı soruyu cevaplar. Öntanımlı yön **aşağı doğrudur**: bir birimin çalışmak için
neye ihtiyaç duyduğunu gösterir. Ters yön ise **yukarı doğrudur**: o birime kimlerin ihtiyaç
duyduğunu gösterir. Operatörün "bunu durdurursam ne kırılır" sorusunun cevabı yalnız ters yöndedir,
oysa parametresiz çağrı aşağı yönü basar. Aşağıdaki iki döküm çalıştırılmamıştır; komutun iki
yönünün ne bastığını göstermek için yazılmıştır:

```text
$ systemctl list-dependencies rapor.service
rapor.service
* +-isleme.service
*   +-kuyruk.service
*     +-veri-alma.service

$ systemctl list-dependencies --reverse veri-alma.service
veri-alma.service
* +-kuyruk.service
* | +-isleme.service
* |   +-rapor.service
* +-olcum.service
```

İkinci döküm dört birim listeliyor ve doğru sayı bu. Ama ağaç, gerektirme kenarı ile sıralama
kenarını ve zayıf isteme kenarını **aynı biçimde** basar; hangi satırın hangi tür kenardan geldiği
ağacın kendisinden okunmaz. Ağaçta görünen bir birim durduğunda gerçekten duracak mıdır, yoksa
yalnız sonra mı başlayacaktır — bunun cevabı birim dosyalarına bakmayı gerektirir. Bir sonraki
bölümün ölçtüğü şey tam olarak bu belirsizliğin bedelidir.

## Dört Okuma, Dört Tanı

Aynı grafik dört ayrıntı düzeyinde okunabilir. **Düz liste** yalnız birimleri verir. **Doğrudan**
okuma, her birim için onu doğrudan gerektiren birimleri sayar. **Geçişli grafik** zinciri sonuna
kadar izler. **Sıralama dahil** okuma ise sıralama kenarlarını da gerektirme sayar. Kâhin,
gerektirme kenarları üzerinden hesaplanan geçişli sonuçtur; ölçü, her okumanın kaç birimde bu
sonuçtan ayrıldığıdır.

```python
BIRIM = {
    "veri-alma": {"gerektirir": [], "yeniden": "her zaman"},
    "kuyruk":    {"gerektirir": ["veri-alma"], "yeniden": "her zaman"},
    "isleme":    {"gerektirir": ["kuyruk"], "yeniden": "arizada"},
    "rapor":     {"gerektirir": ["isleme"], "yeniden": "hayir"},
    "olcum":     {"gerektirir": ["veri-alma"], "yeniden": "her zaman"},
    "yedek":     {"gerektirir": [], "yeniden": "hayir"},
}
SONRA = {"rapor": ["yedek"], "olcum": ["kuyruk"]}      # yalniz siralama


def bagimli_olanlar(birim, birimler=None):
    birimler = BIRIM if birimler is None else birimler
    dogrudan = [a for a, v in birimler.items() if birim in v["gerektirir"]]
    hepsi = set(dogrudan)
    for d in dogrudan:
        hepsi |= bagimli_olanlar(d, birimler)
    return hepsi


def siralamayla(birim):
    """Siralama kenarini da bagimlilik sayan okuma."""
    dogrudan = [a for a, v in BIRIM.items()
                if birim in v["gerektirir"] or birim in SONRA.get(a, [])]
    hepsi = set(dogrudan)
    for d in dogrudan:
        hepsi |= siralamayla(d)
    return hepsi


kahin = {b: len(bagimli_olanlar(b)) for b in BIRIM}
tanilar = {
    "duz liste": {b: 0 for b in BIRIM},
    "dogrudan": {b: sum(1 for v in BIRIM.values() if b in v["gerektirir"])
                 for b in BIRIM},
    "gecisli grafik": dict(kahin),
    "siralama dahil": {b: len(siralamayla(b)) for b in BIRIM},
}
print("birim       kahin  dogrudan  duz liste")
for b in BIRIM:
    print(f"  {b:10s} {kahin[b]:5d}  {tanilar['dogrudan'][b]:8d}"
          f"  {tanilar['duz liste'][b]:9d}")
print("  kahin toplami:", sum(kahin.values()))
print()
print("okuma            cikti satiri  yanlis tani")
for ad, t in tanilar.items():
    yanlis = sum(1 for b in kahin if t[b] != kahin[b])
    print(f"  {ad:14s} {sum(t.values()):12d}  {yanlis:11d}")
```

```
birim       kahin  dogrudan  duz liste
  veri-alma      4         2          0
  kuyruk         2         1          0
  isleme         1         1          0
  rapor          0         0          0
  olcum          0         0          0
  yedek          0         0          0
  kahin toplami: 7

okuma            cikti satiri  yanlis tani
  duz liste                 0            3
  dogrudan                  4            2
  gecisli grafik            7            0
  siralama dahil            9            2
```

## Üç Sayı ve İkinci İddia

Üç sayı yan yana duruyor. **Kâhin:** grafiğin gerçek durumu, altı birim üzerinden **7** bağımlılık
ilişkisi; `veri-alma` durursa dördü birden durur. **Araç çıktısı:** düz liste **0** satır kenar
basıyor, doğrudan okuma **4**, geçişli grafik **7**, sıralama dahil okuma **9**. **Yanlış tanı:**
düz listede **3**, doğrudan okumada **2**, geçişli grafikte **0**, sıralama dahil okumada yine
**2**.

Sıralama dahil okuma en çok satırı basıyor ve tanısı geçişli grafikten kötü. Fazladan iki satır,
`kuyruk` durduğunda `olcum`'un da duracağını ve `yedek` durduğunda `rapor`'un da duracağını
söylüyor; ikisi de yanlış. Bu, kursun ikinci iddiasının ilk ödemesidir: **daha çok çıktı daha iyi
tanı demek değildir.** Doğru sayıya götüren şey satır sayısı değil, hangi kenar türünün sayıldığı.

Düz listeden çıkan **3** yanlış tanı da aynı yerden geliyor. Liste hiçbir kenar göstermediği için
her birim için "durdurursam yalnız o durur" cevabı üretiliyor; bu cevap `veri-alma`, `kuyruk` ve
`isleme` için yanlış, kalan üçü için tesadüfen doğru. Tesadüf sözcüğü burada gevşek kullanılmıyor:
`rapor`, `olcum` ve `yedek` için cevabın tutmasının nedeni okumanın iyi olması değil, o birimlerin
grafiğin ucunda durmasıdır. Aynı okuma, uçları daha az olan bir grafikte daha çok yanılır.
**Tanısı sınanmayan çıktı ölçülmemiş sayılır**; liste doğru, listeden çıkarılan sonuç değil.

Doğrudan okumanın **2** yanlışı ise farklı bir kusurdan geliyor. Bu okuma kenarları görüyor ama
zinciri bir adımda kesiyor: `veri-alma` için **2**, gerçek değer **4**; `kuyruk` için **1**, gerçek
değer **2**. Yanlış yön burada hep aynı, hep **eksik sayma**. Sıralama dahil okumanın yanlış yönü
ise hep **fazla sayma**. İki hata türü aynı sütunda toplandığı için sayı eşitlenebiliyor, oysa
işletim sonuçları birbirinin tersi: eksik sayan operatör hazırlıksız yakalanır, fazla sayan
operatör gereksiz iş yapar.

Buradan çıkan çalışma alışkanlığı tek cümleyle yazılabilir: bir birimi durdurmadan önce **ters
yönlü bağımlılık ağacı** okunur ve ağaçtaki her satırın gerektirme mi sıralama mı olduğu birim
dosyasından doğrulanır. İki adımdan biri atlandığında hata yönü bellidir. Ağaç okunmazsa eksik
sayılır ve beklenmedik birimler durur; ağaç okunup kenar türü doğrulanmazsa fazla sayılır ve
gereksiz bakım penceresi açılır. Ölçüde ikisi de **yanlış tanı** olarak aynı sütuna düşüyor.

## Grafik Bir Anlık Kopyadır

Birim dosyaları diskte tek bir dizinde durmaz. Paketin kurduğu tanım bir dizinde, yerel olarak
yazılan tanım başka bir dizinde, çalışma zamanında üretilen tanım üçüncü bir dizindedir ve aynı
adlı dosya bu dizinler arasında birbirini **gölgeler**. Gölgelemenin yanında bir de ek parça
dosyaları vardır: bunlar dosyanın tamamının yerine geçmez, yalnız birkaç satır ekler ya da tek bir
ayarı değiştirir. Sonuçta bir birimin etkin tanımı tek bir dosyada değil, birkaç dosyanın
birleşimindedir; hangi satırın nereden geldiğini ancak birleşik tanımı basan komut söyler. Bir
birimin dosyasını açıp okumak, o birimin gerçekte hangi ayarlarla çalıştığını görmek anlamına
gelmez.

Bundan daha çok tuzağa düşüren ikinci bir gerçek var: yönetici bu dosyaları her komutta yeniden
okumaz. Açılışta okur, grafiği belleğe kurar ve o kopyayla çalışır. Diskteki dosyayı değiştirmek
bellekteki grafiği değiştirmez; değişiklik ancak yöneticiye yeniden okuması söylendiğinde grafiğe
girer. Bu yüzden "dosyayı düzelttim ama davranış değişmedi" gözlemi bir arıza değil, beklenen
sonuçtur. Durum çıktısı da bu iki hâli ayırmaz: diskteki dosya ile bellekteki tanım birbirinden
farklıyken de birim "çalışıyor" görünür. Kâhin ile araç çıktısı arasındaki fark burada kenar
sayısında değil **zamanda** açılıyor; grafik, diskin bir anlık kopyasıdır ve kopyanın ne zaman
alındığı çıktıda yazmaz.

## İkinci Tohum

Sayılar tek bir grafiğe bağlı olabilir. Aynı ölçü, tohumlu bir üreteçle kurulan yirmi rastgele
altı birimlik grafik üzerinde iki tohumla tekrarlandığında toplam yanlış tanı düz listede **60** ve
**69**, doğrudan okumada **16** ve **21**, geçişli grafikte **0** ve **0**, sıralama dahil okumada
**52** ve **36** çıkıyor. Büyüklük düzeni korunuyor: geçişli grafik iki tohumda da hatasız,
sıralamayı bağımlılık sayan okuma iki tohumda da düz listeye yakın bir hata üretiyor. Tek tek
sayılar kurguya bağlıdır; **sıralama gerektirme değildir** sonucu değildir.

Bir noktanın altı çizilmeye değer. Geçişli grafik okuması iki tohumda da **sıfır** yanlış tanı
veriyor ve bu, kurgunun bir özelliği değil tanımın bir sonucudur: kâhin zaten geçişli kapanışla
tanımlanmıştı. Ölçünün anlamı, doğru okumanın hatasız çıkmasında değil, **yanlış okumaların
büyüklüğünde** yatıyor. Kırk grafiğin toplamında yalnız kenar türünü karıştırmanın bedeli
seksen sekiz yanlış tanı; aynı kırk grafikte hiç kenar okumamanın bedeli yüz yirmi dokuz. İki
sayının birbirine bu kadar yakın olması, sıralama kenarını bağımlılık saymanın grafiği hiç
okumamaktan çok daha iyi olmadığını söylüyor.

## Özet

- Servis yöneticisinin nesnesi **birim**dir; birim çalışan süreç değil, sürecin tanımıdır. **Hedef**
  birimleri öbekleyen bir addır ve kendisi iş yapmaz.
- Grafikte iki tür kenar vardır: **gerektirme** kenarı bağımlılık kurar ve geçişlidir, **sıralama**
  kenarı yalnız zaman söyler ve bağımlılık kurmaz.
- Kurgu sunucuda altı birim ve **7** bağımlılık ilişkisi var; `veri-alma` durursa dört birim daha
  durur.
- Düz birim listesi **0** kenar gösterir ve altı birimin **3**'ünde yanlış tanı üretir; doğrudan
  bağımlılık sütunu bunu **2**'ye indirir, geçişli grafik **0**'a indirir.
- Sıralama kenarlarını bağımlılık sayan okuma **9** satır basıp yine **2** yanlış tanı verir: en çok
  çıktıyı basan okuma en iyi tanıyı vermiyor.
- Ad alanı ve denetim grubu bu kursta anlatılmaz; M03/K05 Çekirdek Arayüzleri ve İzolasyon kursuna
  bırakılmıştır.

## Sonraki Adım

Bu ders grafiği kurdu ve grafiğin listede görünmediğini saydı. Sıradaki soru daha da rahatsız
edicidir: listede görünen tek şey olan **durum sözcüğü** ne kadar güvenilir? Bir birimin karşısında
"çalışıyor" yazması, o birimin çalıştığı anlamına gelir; sağlıklı olduğu anlamına gelmez. Sonraki
ders aynı kurgu sunucuda arıza döngüsüne giren bir birimin durum sözcüğünü ölçer ve altmış çöküşün
kaçının hangi bakış aralığında görüldüğünü sayar.
