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.kblKaynak 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()})")