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ố?


57

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ố?

Câu trả lời:


77

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 gửi 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.

BIÊN TẬP:

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 Notify@Example.com -server SMTP.Example.com -f Administrator@Example.com

3
Tất cả nội dung tốt, nhưng +1 đặc biệt dành cho lời khuyên thông báo qua email và nội dung dòng lệnh.
Maximus Minimus

Tập tin bó nên sống ở đâu trên đĩa?
Matt

Bất cứ nơi nào. Với SC failure w3svc command= "MyBatchFile.cmd"nó sẽ nằm trong đường dẫn hoặc C: \ Windows \ System32. Bạn có thể đặt nó trong bất kỳ thư mục nào nếu bạn sử dụng một đường dẫn đầy đủ, tức làSC failure w3svc command= "c:\Stuff\MyBatchFile.cmd"
Christopher_G_Lewis

9

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


4

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

nhập mô tả hình ảnh ở đây

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


1

Tôi đang sử dụng ServiceKeeper trên máy chủ windows 2008 của mình 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

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ụ đang chạy.


1

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 = "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

0

Đây là câu trả lời của tôi về một chủ đề tương tự 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 = "." 
strSvcName = "YOU_SERVICE_NAME" 
đặt objWMI = GetObject ("winmgmts: \\" & strComputer & "\ root \ cimv2")
đặt objService = objWMI.Get ("Win32_Service.Name = '" & strSvcName & "'")
Nếu objService.State = "Đã dừng" thì
    objService.StartService ()
Kết thúc nếu



0

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 duy trì 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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.