Jawaban:
Di bawah aplikasi Layanan, pilih properti layanan yang dimaksud.
Lihat tab pemulihan - ada segala macam opsi - Saya akan mengatur Kegagalan Pertama & Kedua untuk Memulai Kembali Layanan, Ketiga untuk menjalankan program batch yang mengeluarkan email BLAT dengan pemberitahuan kegagalan ketiga.
Anda juga harus mengatur Reset Gagal Hitung ke 1 untuk mengatur ulang jumlah gagal setiap hari.
SUNTING:
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 Notify@Example.com -server SMTP.Example.com -f Administrator@Example.com
SC failure w3svc command= "MyBatchFile.cmd"
itu harus di jalur atau C: \ Windows \ System32. Anda dapat meletakkannya di direktori mana pun jika Anda menggunakan path lengkap yaituSC failure w3svc command= "c:\Stuff\MyBatchFile.cmd"
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.
Cobalah untuk mengatur waktu pemulihan ke nol:
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.
Saya menggunakan ServiceKeeper di server windows 2008 saya di HostForLife.eu dan bekerja sangat baik. Sebelumnya, saya pernah mengulas tentang ServiceHawk, tetapi saya lebih suka menggunakan ServiceKeeper untuk manajemen dan antarmuka yang lebih mudah.
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.
Saya baru-baru ini menerapkan opsi pemulihan untuk menjalankan skrip PowerShell yang mencoba untuk me-restart layanan beberapa kali dan mengirimkan pemberitahuan email pada kesimpulan, juga.
Setelah beberapa upaya (dan terlepas dari semua hal lain yang saya lihat) Konfigurasi bidang pada tab pemulihan dalam layanan adalah sebagai berikut:
Program: Powershell.exe
** Tidak 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 = "Name@domain.com"
$FromAddress = "Name@domain.com"
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 = "Name@domain.com"
$FromAddress = "Name@domain.com"
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
Ini jawaban saya di utas 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" set objWMI = GetObject ("winmgmts: \\" & strComputer & "\ root \ cimv2") set objService = objWMI.Get ("Win32_Service.Name = '" & strSvcName & "'") If objService.State = "Berhenti" Lalu objService.StartService () Berakhir jika
Seseorang mengajukan pertanyaan serupa di Super User: Anda dapat menginstal alat yang memantau layanan windows. Sesuatu seperti Service Hawk akan membantu Anda memulai layanan, atau memungkinkan Anda untuk menjadwalkan restart otomatis (mungkin pada malam hari) untuk menjaga layanan tetap berjalan lancar.