Konuyu Açan
#1
awk ile servis durumunu kontrol etme
Giriş ve temel düşünce
Bir Linux sisteminde servislerin çalışıp çalışmadığını kontrol etmek çoğu zaman systemctl veya ps gibi araçlarla yapılır. Ancak hedefiniz çok sayıda hizmeti tek bir komutla ve belleği minimum kullanarak gözlemlemekse awk’in metin akışını işleme gücü işinize yarar. Temel fikir, önce servis durumlarını içeren bir komutun çıktılarını toplamak; sonra bu çıktıyı awk ile parse etmek ve her servis için durum, PID, işlem süresi gibi alanları ayıklamaktır. Bu yaklaşım, görevleri otomatize etmek için basit bir raporlama yapısına olanak verir; örneğin her servis için "Active: active (running)" gibi bir kalıp üzerinden uyarı satırları üretebilirsiniz.
Örnek senaryo: basit bir durum tarama
Gerçekçi bir akış için önerilen yapı
Örnek kod parçacığı (sade ve uygulanabilir)
Dikkat edilmesi gerekenler
Güçlü yönler ve sınırlamalar
Bu yöntemde siz hangi servis kümelerini bu şekilde izlemek için özelleştirdiniz? Özel bir çıktı formatı veya uyarı mekanizması var mı?
Bu yazı, bir sistemi komut satırında hızlı ve güvenilir biçimde izlemek isteyenler için pratik bir yol sunuyor. Özellikle birden çok servis çalışırken, basit bir awk tabanlı yaklaşım ile durumları net biçimde raporlayabilir ve gerektiğinde uyarı mekanizmaları kurabilirsiniz. Aşağıda adım adım ilerleyen, gerçek dünya kullanımına uygun bir akış ve bazı örnek senaryolar yer alıyor.
Giriş ve temel düşünce
Bir Linux sisteminde servislerin çalışıp çalışmadığını kontrol etmek çoğu zaman systemctl veya ps gibi araçlarla yapılır. Ancak hedefiniz çok sayıda hizmeti tek bir komutla ve belleği minimum kullanarak gözlemlemekse awk’in metin akışını işleme gücü işinize yarar. Temel fikir, önce servis durumlarını içeren bir komutun çıktılarını toplamak; sonra bu çıktıyı awk ile parse etmek ve her servis için durum, PID, işlem süresi gibi alanları ayıklamaktır. Bu yaklaşım, görevleri otomatize etmek için basit bir raporlama yapısına olanak verir; örneğin her servis için "Active: active (running)" gibi bir kalıp üzerinden uyarı satırları üretebilirsiniz.
Örnek senaryo: basit bir durum tarama
- Amaç: 3 adımdan oluşan bir kontrol yapmak. 1) Servis adını belirt, 2) systemctl status çıktısını korte göre temizle, 3) "running" durumu olanlar için aktif sayısını hesapla.
- Yaklaşım: systemctl list-units --type=service --all | awk komutu ile her satırda hizmet adını ve durumu çıkarıp, "running" olanların sayısını topla.
Gerçekçi bir akış için önerilen yapı
- İlk adımda servisleri listele: systemctl list-units --type=service --all | awk '/\.service/ {print $1, $3}'
- İkinci adımda durum analizi: awk '/running/ {count["running"]++} END {print "Running:", count["running"]}'
- Üçüncü adımda raporu sadeleştir: birden fazla servis için durum özeti ve kırmızı uyarılar.
Örnek kod parçacığı (sade ve uygulanabilir)
KOD
12345678910111213#!/bin/bash
[b]Basit bir servis durumu raporu: running olanları say ve eksik/status gösterecek bir liste[/b]
systemctl list-units --type=service --all | awk '/\.service/ {
name=$1; sub(/\.service$/, "", name);
if (tolower($3) ~ /running/) {
printf "RUNNING: %s\n", name;
running++
} else if (tolower($3) ~ /(failed|dead|inactive)/) {
printf "ISSUE: %s - %s\n", name, $3;
issues++
}
}
END { printf "Toplam running: %d, sorunlu: %d\n", running, issues }'Dikkat edilmesi gerekenler
- Çıktı formatını kendi sisteminize göre özelleştirin; servis adlarını ve durumunu net tutun.
- Banyak durumlar için daha ayrıntılı alanlar (CPU, bellek gibi) gerekiyorsa, systemctl show -p Field benzeri ek bilgiler alınabilir ve awk ile işlenebilir.
- Güvenlik ve performans: çok sayıda servis taranıyorsa çıktı çok uzayabilir; gerektiğinde sadece hedef servisleri seçmek için listeni daraltın.
Güçlü yönler ve sınırlamalar
- Güç: metin tabanlı çıktı üzerinden hızlı, bağımsız ve taşınabilir bir raporlama sağlar.
- Sınırlama: Kompleks durumlar için ayrıntılı JSON veya özel API’ler gerekiyorsa awk tek başına yeterli olmayabilir.
Bu yöntemde siz hangi servis kümelerini bu şekilde izlemek için özelleştirdiniz? Özel bir çıktı formatı veya uyarı mekanizması var mı?
