Follow
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.

Bir servisin gece yarısı durması ve sabah kullanıcı şikayetiyle fark edilmesi, önlenebilir bir senaryodur. PowerShell tabanlı izleme ve otomatik kurtarma, bu tür kesintilerin çoğunu görünmez şekilde çözer.

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ı

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

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ğlar. PowerShell script’imi bu yerleşik mekanizmanın üzerine, ek izleme ve bildirim katmanı olarak konumlandırıyorum.

İ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

Sahadan Bir Uyarı: Kök Nedeni Görmezden Gelmeyin

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 görünmüyor” anlamına gelir. Log dosyanızı düzenli inceleyip, sık tekrarlayan yeniden başlatmaları kök nedene inmek için bir tetikleyici olarak kullanmanızı öneririm.

Sonuç

Windows’un yerleşik servis kurtarma özelliği ile PowerShell tabanlı izleme/bildirim katmanını birleştirmek, hem anlık kesintileri en aza indirir hem de tekrarlayan sorunları görünür kılarak kalıcı çözüme giden yolu açar.

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.