Bash ile Kilitlenen Processleri Otomatik Yeniden Başlatma

0 Yanıtlar 4 Görüntülenme
·
Katılımcılar
Konuyu Açan #0
Kritik sistemlerde veya uzun süre çalışan uygulamalarda, bazen süreçler beklenmedik şekilde takılabilir veya kilitlenebilir. Bu durumda, manuel müdahale yerine otomatik çözüm geliştirmek, sistem güvenilirliğini artırır. Bash scriptleri, bu tür otomasyonlar için oldukça uygun ve esnek araçlardır.

İlk olarak, kilitlenen processleri tespit etmek için birkaç farklı yöntem kullanabiliriz. En yaygın olanı, process’in yanıt verme durumu veya CPU kullanımı gibi göstergelerdir. Örneğin, belirli bir prosesin CPU kullanımının sürekli düşük kalması veya belirli bir süre boyunca hiçbir çıktı üretmemesi, onun takıldığını gösterebilir.

Bir diğer yaklaşım, process’in belirli bir port veya kaynak kullanımı durumunu izlemektir. Ayrıca, timeout komutu veya ps ve grep kombinasyonlarıyla, belirli bir işlem süresini aşan süreçleri tespit edebilirsiniz.

İşte temel bir örnek: Sürekli çalışan ve belirli bir zamanda yanıt vermeyen processleri tespit edip, otomatik olarak yeniden başlatan bash script:

KOD
123456789101112131415161718192021222324
#!/bin/bash

PROCESS_NAME="ornek_process"
RESTART_COMMAND="/usr/bin/systemctl restart ornek_service"
CHECK_INTERVAL=60  # saniye cinsinden

while true; do
    # Process'in çalışıp çalışmadığını kontrol et
    if pgrep -x "$PROCESS_NAME" > /dev/null; then
        # Process’in yanıt verme durumu veya CPU kullanımı gibi ek kontroller eklenebilir
        CPU_USAGE=$(ps -C "$PROCESS_NAME" -o %cpu= | awk '{sum+=$1} END {print sum}')
        # Eğer CPU kullanımı çok düşükse veya belirli bir süre boyunca yanıt alınmıyorsa
        if (( $(echo "$CPU_USAGE < 1.0" | bc -l) )); then
            echo "$(date): $PROCESS_NAME takıldı, yeniden başlatılıyor."
            $RESTART_COMMAND
        fi
    else
        # Process hiç çalışmıyorsa tekrar başlat
        echo "$(date): $PROCESS_NAME bulunamadı, yeniden başlatılıyor."
        $RESTART_COMMAND
    fi
    sleep "$CHECK_INTERVAL"
done


Bu script, düzenli aralıklarla process’i kontrol eder ve gerekirse otomatik yeniden başlatma gerçekleştirir. Ayrıca, prosesin takıldığını belirlemek için CPU kullanımını veya diğer metrikleri özelleştirebilirsiniz.

Elbette, bu yaklaşımın güvenilirliği, izlediğiniz metriklere ve sistem yapılandırmasına bağlıdır. Ayrıca, kritik uygulamalarda, otomatik yeniden başlatmadan önce loglama ve uyarı mekanizmaları entegre etmek iyi bir uygulamadır.

Siz de benzer bir çözüm geliştirdiniz mi? Hangi kriterlerle process takibini sağlıyorsunuz veya farklı yöntemler önerirsiniz?

Yanıt vermek için giriş yapmış olmalısınız.

0 alıntı seçildi