it-swarm-vi.com

Làm cách nào tôi có thể tự động khởi động lại dịch vụ Windows nếu nó gặp sự cố?

Tôi có một dịch vụ Windows thoát bất ngờ cứ sau vài ngày. Có một cách đơn giản để giám sát nó để đảm bảo nó được khởi động lại nhanh chóng nếu nó gặp sự cố?

57
Liam

Trong ứng dụng Dịch vụ, chọn các thuộc tính của dịch vụ được đề cập.

Xem tab khôi phục - có tất cả các loại tùy chọn - Tôi đã đặt Thất bại thứ nhất & Thứ hai để khởi động lại dịch vụ, Thứ ba để chạy một chương trình hàng loạt BLAT Ra một email với thông báo lỗi thứ ba.

Bạn cũng nên đặt Thiết lập lại Đếm thất bại thành 1 để đặt lại số lần thất bại hàng ngày.

CHỈNH SỬA:

Có vẻ như bạn có thể làm điều này thông qua một dòng lệnh:

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

Tệp MyBatchFile.CMD của bạn có thể trông như thế này:

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

Mở Services.msc, nhấp đúp vào dịch vụ để mở Thuộc tính của dịch vụ, có tab Khôi phục và các cài đặt đó sẽ cho phép bạn khởi động lại dịch vụ khi gặp sự cố.

9
jeremyasnyder

Cố gắng đặt thời gian khôi phục về 0:

enter image description here

Dòng lệnh tương đương:

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

Dù sao, đôi khi tự động phục hồi không hoạt động chính xác và nên sử dụng phần mềm của bên thứ ba. Có vẻ như khi dịch vụ thoát một cách duyên dáng với mã thoát 0 cửa sổ, đừng cố khôi phục nó.

4
MSS

Tôi có yêu cầu tương tự để bắt đầu một dịch vụ nếu dừng lại. Giải pháp đơn giản nhất tôi nghĩ là thực hiện lệnh dưới đây trong trình lập lịch tác vụ của windows cứ sau 5 phút:

bắt đầu mạng MyServiceName

Lệnh này về cơ bản sẽ khởi động dịch vụ (nếu dừng) và không có hiệu lực nếu dịch vụ đã chạy.

1
Anderson

Tôi đang sử dụng ServiceKeeper trên máy chủ windows 2008 của tôi tại HostForLife.eu và nó hoạt động rất tốt. Trước đây, tôi đã có một bài đánh giá về ServiceHawk, nhưng tôi thích sử dụng ServiceKeeper hơn để quản lý và giao diện dễ dàng hơn.

1
Play_Park

Gần đây tôi đã triển khai một tùy chọn khôi phục để chạy tập lệnh powershell cố gắng khởi động lại dịch vụ một số lần xác định và gửi thông báo qua email khi kết thúc.

Sau nhiều lần thử (và bất chấp tất cả những điều khác tôi đã thấy) Cấu hình của các trường trên tab khôi phục trong các dịch vụ như sau:

Chương trình: Powershell.exe
[.__.] ** Không phải C:\Windows\System32\WindowsPowerShell\v1.0\Powershell.exe

Tham số dòng lệnh: -command "& {somePath\YourScript.ps1 '$ args [0]' '$ args [1]' '$ args [n]'}"

ví dụ: -command "& {C:\PowershellScripts\ServicesRecovery.ps1 'Tên dịch vụ'}"

** $ args là các tham số sẽ được truyền vào tập lệnh của bạn. Đây là không bắt buộc.

đây là kịch bản 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

Ai đó đã hỏi một câu hỏi tương tự tại Super User: Bạn có thể cài đặt một công cụ giám sát các dịch vụ windows. Một cái gì đó như Service Hawk sẽ giúp bạn giữ các dịch vụ bắt đầu hoặc cho phép bạn lên lịch khởi động lại tự động (có thể trong đêm) để giữ cho dịch vụ hoạt động trơn tru.

0
ExtraLean

Đây là câu trả lời của tôi trên một chủ đề Hy vọng điều này sẽ giúp ...

Bạn có thể lên lịch cho một tập lệnh vbs đơn giản như tập lệnh này để khởi động lại định kỳ dịch vụ trên máy tính nếu cần.

[.__.] strComputer = "." [.___] .Name = '"& strSvcName &"' ") [.__.] Nếu objService.State =" Dừng lại "thì [.__.]


0
Maxwell