Follow

PowerShell ile Windows Servis İzleme ve Otomatik Yeniden Başlatma Görevleri

Kritik Windows servislerinin çalışır durumda kalmasını PowerShell ile nasıl otomatik izleyip, durduğunda kendiliğinden yeniden başlattığımı anlatıyorum.
PowerShell Servis İzleme ve Otomatik Restart makalesi kapak görseli

Bir servis gece yarısı durursa ve bunu ancak sabah gelen kullanıcı şikayetiyle öğrenirseniz, aslında önlenebilir bir sorunu reaktif şekilde çözmüş olursunuz. Peki bu kesintiyi kimse fark etmeden, servis kendi kendine ayağa kalkacak şekilde tasarlayamaz mısınız? Cevap evet — ve bunun için karmaşık bir araca ihtiyacınız yok.

Basit Servis Kontrolü

$kritikServisler = @("W3SVC", "MSSQLSERVER", "Spooler")

foreach ($servis in $kritikServisler) {
    $durum = Get-Service -Name $servis -ErrorAction SilentlyContinue
    if ($durum.Status -ne "Running") {
        Write-Host "$servis çalışmıyor! Yeniden başlatılıyor..." -ForegroundColor Red
        Start-Service -Name $servis
    }
}

Daha Güvenli Yaklaşım: Windows’un Kendi Kurtarma Mekanizması

Birçok durumda PowerShell scripti yazmadan önce Windows’un yerleşik servis kurtarma özelliğini kullanmak daha sağlam bir ilk savunma hattı:

sc.exe failure W3SVC reset= 86400 actions= restart/60000/restart/60000/restart/60000

Bu komut servis çöktüğünde Windows’un otomatik olarak 3 kez yeniden başlatmayı denemesini sağlıyor. PowerShell script’ini bu yerleşik mekanizmanın üzerine, ek izleme ve bildirim katmanı olarak konumlandırmak daha sağlam bir sonuç veriyor.

İzleme + Bildirim + Log: Tam Döngü

$kritikServisler = @("W3SVC", "MSSQLSERVER", "Spooler")
$logDosyasi = "C:\Loglar\servis_izleme.log"

foreach ($servis in $kritikServisler) {
    $durum = Get-Service -Name $servis -ErrorAction SilentlyContinue
    if ($durum.Status -ne "Running") {
        $zaman = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
        Add-Content -Path $logDosyasi -Value "$zaman - $servis DURDU, yeniden başlatılıyor"

        try {
            Start-Service -Name $servis -ErrorAction Stop
            Add-Content -Path $logDosyasi -Value "$zaman - $servis başarıyla başlatıldı"
        } catch {
            Add-Content -Path $logDosyasi -Value "$zaman - $servis BAŞLATILAMADI: $($_.Exception.Message)"
            Send-MailMessage -From "[email protected]" -To "[email protected]" `
                -Subject "ACİL: $servis başlatılamadı!" -Body $_.Exception.Message -SmtpServer "smtp.sirket.com"
        }
    }
}

Zamanlanmış Görev ile 5 Dakikada Bir Kontrol

$tetikleyici = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Minutes 5) -RepetitionDuration ([TimeSpan]::MaxValue)
$eylem = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File C:\Scriptler\ServisIzleme.ps1"
Register-ScheduledTask -TaskName "KritikServisIzleme" -Trigger $tetikleyici -Action $eylem -RunLevel Highest

Otomatik Yeniden Başlatma Bir Çözüm Değil, Bir Kazanılmış Zaman

Burada dikkatli olunması gereken bir nokta var: otomatik yeniden başlatma semptomu gizleyebilir. Bir servis günde birkaç kez otomatik olarak yeniden başlatılıyorsa, bu “sorun çözüldü” değil “sorun var ama artık görünmüyor” anlamına geliyor. Log dosyasını düzenli incelemek ve sık tekrarlayan yeniden başlatmaları kök nedene inmek için bir tetikleyici olarak kullanmak gerekiyor.

Windows’un yerleşik servis kurtarma özelliği ile PowerShell tabanlı izleme/bildirim katmanını birlikte kullandığınızda hem anlık kesintileri en aza indirmiş hem de tekrarlayan sorunları görünür kılarak kalıcı çözüme giden yolu açmış olursunuz.

Comments
Join the Discussion and Share Your Opinion
Add a Comment

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


Newsletter
Join Design Community
Get the latest updates, creative tips, and exclusive resources straight to your inbox. Let’s explore the future of design and innovation together.