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:
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?