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

# Servis Durumu ve Denetimi

Başlatma, durdurma ve etkinleştirmenin ayrı eksenler olduğu kurulur; arıza döngüsündeki bir birimin durum sözcüğü ile gerçek durumu karşılaştırılır ve altmış çöküşün kaç yoklamada görüldüğü sayılır.

Önceki ders birim grafiğini kurdu ve grafiğin birim listesinde görünmediğini saydı. Listede
görünen tek bilgi vardı: her satırın karşısındaki **durum sözcüğü**. Altı satırın altısında
"çalışıyor" yazıyordu ve bu, listeye bakan için rahatlatıcı bir görüntüydü. Bu ders o sözcüğün ne
söylediğini ve neyi söylemediğini ölçer.

Cevap kısa biçimiyle şudur: durum sözcüğü, yöneticinin **şu anda** birimin sürecini ayakta
gördüğünü söyler. Bu bilgi doğrudur ve yanıltıcıdır. Doğrudur, çünkü yönetici gerçekten bir süreç
görüyor. Yanıltıcıdır, çünkü gördüğü süreç on saniye önce doğmuş, ondan öncekinin cesedi çoktan
kaldırılmış olabilir. Ölçülen şey, "çalışıyor" sözcüğünden çıkarılan **sağlıklı** tanısının kaç kez
yanlış olduğudur.

## Etkinleştirme ile Başlatma Ayrı Eksenlerdir

Servis yöneticisinin en çok karıştırılan iki eylemi **başlatma** ile **etkinleştirme**dir ve
aralarındaki fark bir eksen farkıdır. Başlatma şimdiyi değiştirir: birimin süreci hemen ayağa
kaldırılır, sistem yeniden açıldığında bu kararın izi kalmaz. Etkinleştirme geleceği değiştirir:
birim bir hedefin altına bağlanır ve o hedefe her ulaşıldığında başlatılır, ama etkinleştirmenin
kendisi hiçbir süreç başlatmaz. Durdurma ile etkisizleştirme de aynı biçimde ayrılır.

İki eksen dört bileşim üretir ve dördü de gerçekte görülür. Bir birim **etkin ve çalışıyor**
olabilir: beklenen hâl. **Etkin ama çalışmıyor** olabilir: açılışta başlatılacak, şu an duruyor.
**Etkin değil ama çalışıyor** olabilir: elle başlatılmış, sistem yeniden açıldığında geri gelmez.
**Etkin değil ve çalışmıyor** olabilir: kapalı. Üçüncü bileşim en pahalı olanıdır, çünkü bugün
sorunsuz görünen bir sunucu ilk yeniden açılışta o birimi kaybeder ve kaybın nedeni aylar önce
verilmiş bir karardır.

Bu iki ekseni tek satırda gösteren komut, birim durumunu birkaç ayrı alanla basar. Aşağıdaki döküm
çalıştırılmamıştır; alanların ne anlattığını göstermek için yazılmış bir örnektir:

```text
$ systemctl status veri-alma.service
* veri-alma.service - Veri alma birimi
     Loaded: loaded (/etc/systemd/system/veri-alma.service; enabled)
     Active: active (running)
   Main PID: <surec numarasi>
      Tasks: 3
```

`Loaded` alanı birim dosyasının bulunup okunduğunu söyler ve parantez içindeki sözcük
etkinleştirme eksenini taşır. `Active` alanı şimdiki hâli söyler; parantez içindeki ikinci sözcük
daha ince bir alt durumdur ve servisin kendi yaşam döngüsünden gelir. Bu iki alan birbirinden
bağımsızdır. Birinin değeri diğerini belirlemez, aynı çıktı satırında yan yana durmaları
belirlediklerini düşündürür.

Etkinleştirmenin nasıl çalıştığı bu bağımsızlığı açıklar. Yönetici bir birimi etkinleştirdiğinde
yaptığı şey, birim dosyasını bir hedefin "istenenler" dizinine bağlamaktır. Ortada yeni bir süreç
yoktur, çalışan hiçbir şey değişmez; yalnız diskte bir bağ oluşur. Bu yüzden etkinleştirme komutu
çalışan bir birimi durdurmaz, etkisizleştirme komutu da onu öldürmez. İkisini aynı anda yapmak
isteyen operatör iki ayrı komut vermek zorundadır ve bu iki komuttan birini unutmak, üçüncü
bileşimin en yaygın üretim yoludur.

Denetim eylemlerinin listesi bu ikisiyle bitmiyor. **Yeniden başlatma** birimi durdurup başlatır ve
süreç kimliği değişir. **Yeniden yükleme**, süreci öldürmeden yapılandırmayı yeniden okumasını
ister; bunu yapabilmek birimin desteklemesine bağlıdır ve desteklemeyen bir birimde komut
sessizce yeniden başlatmaya dönüşebilir ya da hiçbir şey yapmaz. **Maskeleme** ise en sert olanıdır:
birim adı boş bir tanıma bağlanır ve birim artık ne elle ne de bir bağımlılık üzerinden
başlatılabilir. Maskelenmiş bir birimi başlatmayı deneyen başka bir birim başarısız olur ve hata
iletisi maskeyi değil, "birim başlatılamadı"yı söyler. Maskeleme unutulduğunda haftalar sonra
anlaşılan bir arıza bırakır.

## Komutun Dönmesi Hazır Olmak Değildir

Süreç yönetimi konusunda sonlandırma sinyali için kurulan cümle burada da geçerlidir: **komutun
dönmesi işin bittiği anlamına gelmez.** Başlatma komutu verildiğinde yöneticinin beklediği şey,
birimin türüne göre değişir. En yalın birim türünde yönetici programı çalıştırır ve çalıştırma
çağrısı başarılı döndüğü anda birimi "başlatıldı" sayar. O anda süreç henüz yapılandırmasını
okumamış, dinleme yuvasını açmamış, veritabanı bağlantısını kurmamış olabilir. Komut başarıyla
döner, durum "çalışıyor" olur ve servis birkaç saniye daha isteğe cevap veremez.

Bu boşluğu kapatmanın yolu, birimin hazır olduğunu yöneticiye kendisinin bildirmesidir; bildirim
destekleyen birim türlerinde yönetici "başlatıldı" demeden önce bildirimi bekler ve bağımlılık
zincirindeki sonraki birim de o ana kadar başlatılmaz. Bildirim yoksa zincir erken ilerler:
`kuyruk`, `veri-alma` daha hazır değilken başlatılır ve ilk denemesinde bağlanamaz. Görünen tabloda
iki birim de "çalışıyor" yazar. Bu boşluk bu derste ölçülmüyor; ölçülen şey arızanın kendisinin
görünmezliği. İkisinin ortak kökü aynı: **yöneticinin bildiği tek şey sürecin var olduğudur.**

## Ölçüm: Arıza Döngüsündeki Birim

Kurgu sunucunun altı birimi, altısı da arızalı hâle sokuluyor: her biri düzenli aralıklarla
çöküyor. Farklı olan tek şey birimlerin **yeniden başlatma politikası**. `veri-alma`, `kuyruk` ve
`olcum` için politika "her zaman", `isleme` için "arızada", `rapor` ve `yedek` için "hayır".
Gözlem penceresi 600 saniye, çöküş aralığı 10 saniye.

**SV11 — gözlem penceresi 600 saniyedir** ve bütün süreler modeldeki saniyedir. **SV12 — altı
birimin altısı da bu pencerede arızalıdır**; kâhin bunu bilir. **SV13 — yeniden başlatma anlıktır**
ve başarısız olmaz. **SV14 — "hayır" politikalı birim ilk çöküşten sonra durur** ve durumu
"arızalı" olur. **SV15 — yeniden başlatılan birimin durumu "çalışıyor" kalır.** **SV16 — durum
sözcüğünden çıkarılan tanı yalnız iki değer alır:** "çalışıyor" görülürse sağlıklı, "arızalı"
görülürse arızalı. **SV17 — birim her çöküşte 2 saniye ayakta değildir**, çöküş anı her dönemde
tohumlu üreteçle seçilir. **SV18 — yoklama anlıktır** ve yoklandığı saniyedeki hâli görür. **SV19 —
yoklamanın maliyeti yoktur**; sistemi yavaşlatmaz ve ölçtüğü şeyi değiştirmez. **SV20 — durum
sorgusu gecikmesizdir**; sorulan saniyedeki gerçek hâli döndürür, araç kendisi yanılmaz.

Son iki varsayım kasıtlı olarak aracın lehinedir. Gerçek bir sistemde yoklamanın kendi maliyeti
vardır ve durum sorgusu bir önceki taramanın önbelleğinden dönebilir. Model bunları sıfırlıyor;
dolayısıyla aşağıdaki yanlış tanı sayıları, aracın **en iyi hâlinde** ürettiği alt sınırdır.

```python
TOHUM = 20260218
DONEM = 600
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"},
}


def uretec(tohum):
    d = tohum

    def sonraki(n):
        nonlocal d
        d = (d * 1103515245 + 12345) % 2147483648
        return d % n
    return sonraki


def ariza_dongusu(birim, sure=DONEM, aralik=10, birimler=None):
    """`her zaman` politikasi arizayi gizler: servis hep 'calisiyor' gorunur."""
    birimler = BIRIM if birimler is None else birimler
    p = birimler[birim]["yeniden"]
    if p == "hayir":
        return {"politika": p, "yeniden_baslatma": 0, "gorunen_durum": "arizali",
                "gorunmez_sure": 0}
    if p == "arizada":
        return {"politika": p, "yeniden_baslatma": sure // aralik,
                "gorunen_durum": "calisiyor", "gorunmez_sure": sure}
    return {"politika": p, "yeniden_baslatma": sure // aralik,
            "gorunen_durum": "calisiyor", "gorunmez_sure": sure}


def olu_araliklar(tohum=TOHUM, sure=DONEM, donem=10, olu=2):
    """Birim her donemde bir kez cokuyor ve `olu` saniye ayakta degil."""
    r = uretec(tohum)
    return [(t + r(donem - olu + 1), olu) for t in range(0, sure, donem)]


def yoklama(araliklar, adim, sure=DONEM):
    """`adim` saniyede bir durum soran operator."""
    bakis = gordu = 0
    for t in range(0, sure, adim):
        bakis += 1
        if any(b <= t < b + u for b, u in araliklar):
            gordu += 1
    return {"bakis": bakis, "gordu": gordu, "yanlis": bakis - gordu}


print("birim      politika    yeniden  gorunen durum  gorunmez sure  tani")
yanlis_tani = 0
for b in BIRIM:
    a = ariza_dongusu(b)
    dogru = a["gorunen_durum"] == "arizali"
    yanlis_tani += 0 if dogru else 1
    print(f"  {b:10s} {a['politika']:10s} {a['yeniden_baslatma']:8d}"
          f"  {a['gorunen_durum']:13s}  {a['gorunmez_sure']:13d}"
          f"  {'dogru' if dogru else 'YANLIS'}")
print("  kahin: 6 birimin 6'si arizali | yanlis tani:", yanlis_tani)
print()
A = olu_araliklar()
print("gercek cokme:", len(A), "| toplam olu saniye:", sum(u for _, u in A))
print("yoklama araligi  bakis  arizali goren  yanlis tani")
for adim in (1, 5, 15, 30, 60):
    y = yoklama(A, adim)
    print(f"  {adim:14d}  {y['bakis']:5d}  {y['gordu']:13d}  {y['yanlis']:11d}")
```

```
birim      politika    yeniden  gorunen durum  gorunmez sure  tani
  veri-alma  her zaman        60  calisiyor                600  YANLIS
  kuyruk     her zaman        60  calisiyor                600  YANLIS
  isleme     arizada          60  calisiyor                600  YANLIS
  rapor      hayir             0  arizali                    0  dogru
  olcum      her zaman        60  calisiyor                600  YANLIS
  yedek      hayir             0  arizali                    0  dogru
  kahin: 6 birimin 6'si arizali | yanlis tani: 4

gercek cokme: 60 | toplam olu saniye: 120
yoklama araligi  bakis  arizali goren  yanlis tani
               1    600            120          480
               5    120             21           99
              15     40              7           33
              30     20              2           18
              60     10              0           10
```

## Üç Sayı

**Kâhin:** altı birimin altısı arızalı; "her zaman" politikalı bir birim 600 saniyede **60 kez**
yeniden başlıyor ve toplam **120 saniye** ayakta değil. **Araç çıktısı:** dört birimin karşısında
**"çalışıyor"**, iki birimin karşısında "arızalı" yazıyor; en sık yoklamada bile arızalı hâl
**120** bakışta görülüyor, en seyrek yoklamada **0** bakışta. **Yanlış tanı:** durum sözcüğünden
çıkarılan sağlık tanısı altı birimin **4**'ünde yanlış; saniyede bir bakan operatör **480**,
altmış saniyede bir bakan operatör **10** kez yanlış tanı koyuyor.

Ortak tanımın dördüncü okuması bu tablodadır: **yeniden başlatma politikası arızayı gizliyor.**
"Her zaman" politikalı birim altmış kez ölüp altmış kez dirildiği hâlde durumu hiç değişmiyor;
arıza **600 saniye boyunca görünmez** kalıyor. Politikası "hayır" olan birim ise ilk çöküşte
"arızalı" oluyor ve doğru tanı veriyor. Sonuç ters yönde okunmalı: **daha dayanıklı yapılandırılmış
birim daha az görünür arıza üretiyor**, çünkü dayanıklılık burada görünürlüğün pahasına satın
alınmış.

Tablonun en rahatsız edici satırı `isleme` satırıdır. Politikası "her zaman" değil, "arızada";
yani sözde daha ölçülü bir seçim yapılmış. Sonuç aynı: **60** yeniden başlatma, **"çalışıyor"**
durumu, **600** saniye görünmezlik. İki politika arasındaki fark bu koşumda hiç görünmüyor, çünkü
birim hep hatayla çıkıyor. Farkın nerede ortaya çıktığı ve hangi arıza türünün hangi politikada
kaybolduğu bir sonraki dersin ölçüsüdür.

## Daha Sık Bakmak Yetmiyor

Yoklama taraması ikinci iddiayı ödüyor. Saniyede bir bakan operatör 600 bakış yapıyor ve bunun
**120**'sinde arızalı hâli yakalıyor; beş saniyede bir bakan 120 bakışta **21**, on beş saniyede
bir bakan 40 bakışta **7**, otuz saniyede bir bakan 20 bakışta **2**, altmış saniyede bir bakan 10
bakışta **0** yakalıyor. Bakış sayısı altmış kat arttığında yakalanan arıza sayısı da artıyor;
oranı ise düşüyor. Yakalanan oran saniyelik yoklamada beşte bir, altmış saniyelik yoklamada sıfır.

Sayının böyle davranmasının nedeni, arızanın **dar bir pencerede** olması. Birim her on saniyede
bir çöküyor ve yalnız 2 saniye ayakta değil; geri kalan 8 saniyede yönetici gerçekten çalışan bir
süreç görüyor. Yoklama bu 2 saniyelik pencereye rastlamak zorunda. Seyrek bakan operatör yalnız
"az görmüyor", çoğu koşumda **hiç görmüyor** ve elindeki bütün kanıt "çalışıyor" diyor. **Geç
bakan az görür.**

Buradan çıkan sonuç, yoklama aralığını kısaltmak değildir. Saniyede bir bakmak bile 480 yanlış
tanı bırakıyor. Durum sözcüğü, kaç kez sorulursa sorulsun, **yeniden başlatma sayısını**
taşımıyor; taşıyan alan başka. Bir birimin kaç kez yeniden başlatıldığı ve en son ne zaman
başladığı yöneticinin ayrı alanlarında durur ve doğru soru budur: "çalışıyor mu" değil, **"ne
zamandan beri çalışıyor"**. Altmış saniyeden kısa bir çalışma süresi, altmış kez yeniden başlamış
bir birimin tek görünür izidir.

Aynı komutun tam çıktısı bu alanları zaten basıyor; sorun alanların olmaması değil, gözün ilk
satıra takılması. Aşağıdaki döküm çalıştırılmamıştır; arıza döngüsündeki bir birimin çıktısında
kanıtın nerede durduğunu göstermek için yazılmıştır:

```text
* kuyruk.service - Kuyruk birimi
     Loaded: loaded (/etc/systemd/system/kuyruk.service; enabled)
     Active: active (running) since <cok kisa sure once>
   Main PID: <surec numarasi>
     Status: "hazir"
   <zaman damgasi> sunucu systemd[1]: kuyruk.service: Main process exited
   <zaman damgasi> sunucu systemd[1]: kuyruk.service: Scheduled restart job
```

Birinci satır "çalışıyor" diyor, üçüncü satır o çalışmanın **ne zamandan beri** sürdüğünü
söylüyor ve son iki satır sürecin çıktığını, yeniden başlatmanın çizelgelendiğini söylüyor. Üçü aynı çıktıda,
üçü de doğru. Yanlış tanı, çıktının eksikliğinden değil, hangi satırın okunduğundan doğuyor. Bir
birimin sağlığını "çalışıyor" sözcüğüyle değil **çalışma süresiyle** okumak, bu dersteki 480 yanlış
tanının hepsini ortadan kaldırır; çünkü altmış kez yeniden başlayan bir birimin çalışma süresi
hiçbir bakışta on saniyeyi geçmez.

Bu, kursun ikinci iddiasının ters yüzüdür ve iki cümlede toplanabilir. Daha çok çıktı tanıyı
düzeltmiyor, çünkü ayırt eden şey satır sayısı değil. Daha az ama **doğru alan** okumak tanıyı
düzeltiyor, çünkü ayırt eden şey ölçünün kendisi.

## İkinci Tohum

Çöküş anları tohumlu seçildiği için tablo tohuma bağlı olabilir. Ölçü ikinci tohumla
(`20260219`) tekrarlandığında yakalanan arıza sayıları şöyle çıkıyor: saniyelik yoklamada iki
tohumda da **120**, beş saniyede iki tohumda da **21**, on beş saniyede **7** ve **8**, otuz
saniyede **2** ve **3**, altmış saniyede **0** ve **3**. Sık yoklama iki tohumda aynı; seyrek
yoklamada sonuç **kurguya bağlıdır** ve öyle yazılmalıdır. Altmış saniyelik yoklamanın sıfır
çıkması bu koşuma özgüdür, üç çıkması da öyle. Tohumdan bağımsız olan şey oranın yönü: bakış
seyrekleştikçe yakalanan pay düşüyor ve hiçbir tohumda 120'yi geçmiyor.

## Özet

- **Etkinleştirme** geleceği, **başlatma** şimdiyi değiştirir; iki eksen dört bileşim üretir ve
  "etkin değil ama çalışıyor" bileşimi ilk yeniden açılışta kaybedilir.
- Durum çıktısındaki yüklenme, etkinleştirme ve etkinlik alanları birbirinden bağımsızdır; yan
  yana basılmaları birbirini belirlediklerini düşündürür.
- Arıza döngüsündeki altı birimin altısı arızalıyken **4**'ü "çalışıyor" görünüyor: yeniden
  başlatma politikası arızayı gizliyor.
- "Her zaman" politikalı birim 600 saniyede **60 kez** yeniden başlıyor, toplam **120 saniye**
  ayakta değil ve arıza **600 saniye görünmez** kalıyor.
- Yoklama sıklaştıkça yakalanan arıza artıyor ama yakalanan **oran** düşüyor: 1 saniyede 120/600,
  60 saniyede 0/10. Saniyelik yoklama bile **480** yanlış tanı bırakıyor.
- Doğru soru "çalışıyor mu" değil **"ne zamandan beri çalışıyor"**; yeniden başlatma sayısı durum
  sözcüğünde değil ayrı alanlarda durur.

## Sonraki Adım

Bu ders politikanın gizlediğini saydı ama politikayı kimin koyduğuna bakmadı. Politika birim
dosyasında tek satırdır ve o satırı yazan kişi genellikle "servis hep ayakta olsun" diye
düşünmüştür. Sonraki ders birim dosyasını baştan yazar ve üç politikanın — "hayır", "arızada", "her
zaman" — hangi arıza türünü gizlediğini dokuz bileşim üzerinde sayar. Aynı derste, gizlemeyi
kırmanın yolu olan **başlatma sınırı** ölçülür: görünmez sürenin 600 saniyeden kaça indiği tablo
hâlinde çıkar.
