pengembangan-web-mp-pd.com

Bagaimana saya bisa secara otomatis me-restart layanan Windows jika crash?

Saya memiliki layanan Windows yang keluar secara tak terduga setiap beberapa hari. Apakah ada cara sederhana untuk memantaunya untuk memastikan restart dengan cepat jika crash?

57
Liam

Di bawah aplikasi Layanan, pilih properti layanan yang dimaksud.

Lihat tab pemulihan - ada segala macam opsi - Saya akan menetapkan Kegagalan Pertama & Kedua untuk Memulai Kembali Layanan, Ketiga untuk menjalankan program batch yang BLAT Keluar email dengan pemberitahuan kegagalan ketiga.

Anda juga harus mengatur Reset Gagal Hitung ke 1 untuk mengatur ulang jumlah gagal setiap hari.

EDIT:

Sepertinya Anda dapat melakukan ini melalui baris perintah:

SC failure w3svc reset= 432000  actions= restart/30000/restart/60000/run/60000
SC failure w3svc command= "MyBatchFile.cmd"

File MyBatchFile.CMD Anda dapat terlihat seperti ini:

blat - -body "Service W3svc Failed" -subject "SERVICE ERROR" -to [email protected] -server SMTP.Example.com -f [email protected]
79

Buka Services.msc, klik dua kali pada layanan untuk membuka Properti layanan, ada tab Pemulihan dan pengaturan tersebut harus memungkinkan Anda untuk memulai kembali layanan setelah kegagalan.

9
jeremyasnyder

Cobalah untuk mengatur waktu pemulihan ke nol:

enter image description here

Setara baris perintah:

SC failure YOUR_SERVICE_NAME reset= 0 actions= restart/0/restart/0/restart/0

Bagaimanapun, kadang-kadang pemulihan otomatis tidak berfungsi dengan benar dan disarankan untuk menggunakan perangkat lunak pihak ketiga. Tampaknya ketika layanan keluar dengan anggun dengan kode keluar 0 windows tidak mencoba memulihkannya.

4
MSS

Saya memiliki persyaratan yang sama untuk memulai layanan jika berhenti. Solusi paling sederhana yang saya pikir adalah menjalankan perintah di bawah ini di windows task scheduler setiap 5 menit:

mulai bersih MyServiceName

Perintah ini pada dasarnya akan memulai layanan (jika dihentikan) dan tidak berpengaruh jika layanan sudah berjalan.

1
Anderson

Saya menggunakan ServiceKeeper di server windows 2008 saya di HostForLife.eu dan ini bekerja dengan sangat baik. Sebelumnya, saya memiliki ulasan tentang ServiceHawk, tetapi saya lebih suka menggunakan ServiceKeeper untuk manajemen dan antarmuka yang lebih mudah.

1
Play_Park

Saya baru-baru ini menerapkan opsi pemulihan untuk menjalankan skrip PowerShell yang mencoba untuk me-restart layanan beberapa kali dan mengirim pemberitahuan email pada kesimpulan, juga.

Setelah beberapa upaya (dan terlepas dari semua hal lain yang saya lihat) Konfigurasi bidang pada tab pemulihan di layanan adalah sebagai berikut:

Program: Powershell.exe
** Bukan C:\Windows\System32\WindowsPowerShell\v1.0\Powershell.exe

Parameter baris perintah: -command "& {SomePath\YourScript.ps1 '$ args [0]' '$ args [1]' '$ args [n]'}"

mis .: -command "& {C:\PowershellScripts\ServicesRecovery.ps1 'Nama Layanan'}"

** $ args adalah parameter yang akan diteruskan ke skrip Anda. Ini tidak wajib.

di sini adalah skrip powershell:

cd $PSScriptRoot

$n = $args[0]

function CreateLogFile {
$events = Get-EventLog -LogName Application -Source SomeSource -Newest 40
if (!(Test-Path "c:\temp")) {
    New-Item -Path "c:\temp" -Type directory}
if (!(Test-Path "c:\temp\ServicesLogs.txt")) {
    New-Item -Path "c:\temp" -Type File -Name "ServicesLogs.txt"}
    $events | Out-File -width 600 c:\temp\ServicesLogs.txt
}

function SendEmail  {
$EmailServer = "SMTP Server"
$ToAddress = "[email protected]"
$FromAddress = "[email protected]"

CreateLogFile

$Retrycount = $Retrycount + 1
send-mailmessage -SmtpServer $EmailServer -Priority High -To $ToAddress -From $FromAddress -Subject "$n Service failure" `
-Body "The $n service on server $env:COMPUTERNAME has stopped and was unable to be restarted after $Retrycount attempts." -Attachments c:\temp\ServicesLogs.txt

Remove-Item "c:\temp\ServicesLogs.txt"
}

function SendEmailFail  {
$EmailServer = "SMTP Server"
$ToAddress = "[email protected]"
$FromAddress = "[email protected]"

CreateLogFile

$Retrycount = $Retrycount + 1
send-mailmessage -SmtpServer $EmailServer -Priority High -To $ToAddress -From $FromAddress -Subject "$n Service Restarted" `
-Body "The $n service on server $env:COMPUTERNAME stopped and was successfully restarted after $Retrycount attempts. The relevant system logs are attached." -Attachments c:\temp\ServicesLogs.txt

Remove-Item "c:\temp\ServicesLogs.txt"
}

function StartService {

$Stoploop = $false

do {
   if ($Retrycount -gt 3){
     $Stoploop = $true
     SendEmail
     Break
    }

   $i =  Get-WmiObject win32_service | ?{$_.Name -imatch $n} | select Name, State, StartMode
    if ($i.State -ne "Running" -and $i.StartMode -ne "Disabled") {

        sc.exe start $n
        Start-Sleep -Seconds 35

        $i =  Get-WmiObject win32_service | ?{$_.Name -imatch $n} | select State
          if ($i.state -eq "Running"){
              $Stoploop = $true
              SendEmailFail}
          else {$Retrycount = $Retrycount + 1}
    }        
}
While ($Stoploop -eq $false)
}

[int]$Retrycount = "0"
StartService
1
Nick

Seseorang mengajukan pertanyaan serupa di Super User: Anda dapat menginstal alat yang memantau layanan windows. Sesuatu seperti Layanan Elang akan membantu Anda menjaga layanan dimulai, atau memungkinkan Anda untuk menjadwalkan restart otomatis (mungkin pada malam hari) untuk menjaga layanan berjalan lancar.

0
ExtraLean

Ini adalah jawaban saya pada utas yang serupa Semoga ini bisa membantu ...

Anda dapat menjadwalkan skrip vbs sederhana seperti ini untuk memulai ulang layanan pada komputer secara berkala jika diperlukan.

 strComputer = "." 
 strSvcName = "YOUR_SERVICE_NAME" 
 atur objWMI = GetObject ("winmgmts: \\" & strComputer & "\ root\cimv2") 
 atur objService = objWMI.Get ("Win32_Service .Name = '"& strSvcName &"' ") 
 Jika objService.State =" Berhenti "Kemudian 
 ObjService.StartService () 
 Akhiri Jika 


0
Maxwell