KABAFORCEGeliştirici KabaOS'u edinin

Servis · 50 satır

Nabız servisi

Başlatılır, durdurulana kadar çalışır; kapatma sinyalinde kaynaklarını bırakarak çıkar.

Önizleme · 0.6.0 — dil 1.0 öncesidir; sözdizimi ve kütüphane değişebilir. Buradaki her örnek derlenerek sınanır.

Çalıştırın

Uçbirim
kabalang calistir 01_nabiz_servisi.kbl

Kaynak kod

01_nabiz_servisi.kbl
# ╔═══════════════════════════════════════════════════════════════════╗
# ║  SERVİS — uzun ömürlü arka plan süreci (systemd daemon)           ║
# ╚═══════════════════════════════════════════════════════════════════╝
# Bu program bir DAEMON'dur: başlatılır, durdurulana kadar çalışır ve
# SIGTERM/SIGINT geldiğinde AÇIK KAYNAKLARINI BIRAKARAK kapanır.
#
# Birim dosyası üretmek için:
#     kabalang birim ornekler/05-servis/01_nabiz_servisi.kbl --kullanici-birimi
#
# ⚠️ Üç tuzak, üçü de ölçülmüş:
#  1. `servis.uyu()` DÖNÜŞÜNÜ DENETLE. `yanlis` dönerse "dur" demektir;
#     yok sayan döngü SIGTERM'i duymaz, systemd `TimeoutStopSec` sonunda
#     SIGKILL atar ve `dururken` kancası HİÇ çalışmaz.
#  2. Döngü koşulu `servis.calisiyor_mu()` olmalı; `dogru` yazılırsa
#     program yalnız öldürülerek durur.
#  3. `uyu()` DEĞİL `servis.uyu()` kullan: `uyu()` sinyalle uyanmaz,
#     kapanma tam bir uyku süresi gecikir.

kullan kaba.sistem

nabiz_dosyasi = "/tmp/kabalang-nabiz.log"
tur = 0

servis "kabalang-nabiz":
    # ── Başlangıç kancası: bir kez, döngüden önce ─────────────────────
    baslarken:
        gunluk.bilgi(f"nabız dosyası: {nabiz_dosyasi}")
        dosya.yaz(nabiz_dosyasi, "")

    # ── Ana gövde: durdurulana kadar ──────────────────────────────────
    calisirken:
        iken servis.calisiyor_mu():
            tur = tur + 1
            yuk = sistem.cpu_kullanim()
            ram = sistem.ram_yuzde()
            dosya.ekle(nabiz_dosyasi, f"{tur} cpu=%{yuk} ram=%{ram}\n")

            eger yuk > 90:
                gunluk.uyari(f"işlemci yükü yüksek: %{yuk}")
            degilse:
                gunluk.bilgi(f"nabız {tur} · cpu %{yuk} · ram %{ram}")

            # 5 saniye bekle; sinyal gelirse ANINDA uyanır ve `yanlis` döner.
            eger degil servis.uyu(5000):
                kir

    # ── Kapanış kancası: kaynakları bırak ─────────────────────────────
    dururken:
        dosya.ekle(nabiz_dosyasi, f"kapandi tur={tur}\n")
        gunluk.bilgi(f"{tur} turdan sonra düzgün kapandı ({servis.durdurma_nedeni()})")