Powershell 自动服务重启

Powershell Auto Service Restart

我在一台特定服务器上的 prtg 探测服务器上遇到问题。 在此服务器中,cpu 使用率达到 90% 并且由于 prtg 服务需要重新启动。 如何在 cpu 使用率达到 90% 时自动重启 prtg 服务?

我正在考虑创建一个带有条件的脚本,但无法完成。

-Set-Service [service name] -startuptype automatic

如果您使用的是 PowerShell 5.x,则可以使用 Get-Counter 获得 CPU 用法。在服务器上尝试以下操作来检查:

$peridiocallyChecks = {
   # Check if logging source is available, if not add it
   if (!(Get-EventLog -Source "CPU supervision" -LogNameApplication)){
       New-EventLog -LogName Application -Source "CPU supervision"
   }

   $cpuUsage = [double] (Get-Counter '\Processor(_Total)\% Processor Time' -ErrorAction SilentlyContinue | Select-Object -ExpandProperty CounterSamples | Select-Object -ExpandProperty CookedValue)

   if ($cpuUsage -gt 90) {
       Write-EventLog -LogName "Application" -Source "CPU supervision" -EntryType Information -EventId 1 -Message "CPU usage is $cpuUsage. Going to stop service"
       Stop-Service "yourServiceName"
       # Some cooldown time for the service to shutdown
       Start-Sleep -Seconds 10
       Start-Service "yourServiceName"
       Write-EventLog -LogName "Application" -Source "CPU supervision" -EntryType Information -EventId 1 -Message "Restarted service"
   }
}

# Trigger every hour
$trigger = New-JobTrigger -Once -At "9/21/2012 0am" -RepetitionInterval (New-TimeSpan -Hour 12) -RepetitionDuration ([TimeSpan]::MaxValue)

Register-ScheduledJob -Name "CPUCheck" -Trigger $trigger -Scriptblock $peridiocallyChecks

检查以下有关职位的链接:

希望对您有所帮助

要获得 CPU PRTG 的用法,您可以使用以下 powershell 行

Get-Counter '\Process(*)\% Processor Time' | Select-Object -ExpandProperty countersamples | Select-Object -Property instancename, cookedvalue| where {$_.InstanceName -match "prtg" }

然后您可以将它与您的限制 (90%) 进行比较,并决定是否要 运行 遵循 powershell 中的命令

restart-service PRTG

这就是答案,现在我针对你的情况提出建议

  • 重新启动探测器永远不是高 CPU 负载的解决方案 - 如果可能,请尝试添加更多 CPU
  • 减少传感器数量
  • 识别长 运行ning 传感器或 CPU 重型传感器并优化它们或使用轻量级替代方案移除 them/replace 它们
  • 如果添加 CPU(s) 或以上的点不是一个选项,请将另一个探头添加到不同的机器 - 这样您可以将传感器拆分为两个探头