我正在尝试在CPU使用率达到80%时重新启动特定服务。 我正在使用作业触发器并尝试获取日志,但无法重新启动服务。
$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"
}
#Getting CPU usage e.g 45.3434242423
$cpuUsage = [double] (Get-Counter '\Processor(_Total)\% Processor Time' -ErrorAction SilentlyContinue | Select-Object -ExpandProperty CounterSamples | Select-Object -ExpandProperty CookedValue)
if ($cpuUsage -gt 80) {
Write-EventLog -LogName "Application" -Source "CPU supervision" -EntryType Information -EventId 1 -Message "CPU usage is $cpuUsage. Going to stop service"
Stop-Service "service name"
# Some cooldown time for the service to shutdown
Start-Sleep -Seconds 10
Start-Service "service name"
Write-EventLog -LogName "Application" -Source "CPU supervision" -EntryType Information -EventId 1 -Message "Restarted service"
}
Get-EventLog -Source "CPU supervision" -LogName Application
}
# Trigger every hour
$trigger = New-JobTrigger -Once -At "17/05/2019 0am" -RepetitionInterval (New-TimeSpan -Hour 12) -RepetitionDuration ([TimeSpan]::MaxValue)
Register-ScheduledJob -Name "CPUCheck23" -Trigger $trigger -Scriptblock $peridiocallyChecks
答案 0 :(得分:0)
Write-EventLog
正在写入Windows Event log。我将运行在计划任务运行的$peridiocallyChecks
块之外创建日志源的代码。您需要管理员权限才能创建日志源,并且可能发生的事情是该日志源在计划任务期间失败,并且您没有获得任何日志记录/脚本块的其余部分未运行。
因此,第一步,使该日志记录在预定任务之外运行,并在事件查看器中构建自定义视图,以便您可以在交互式提示中执行Write-EventLog
,刷新视图并查看日志消息。
在您可以查看日志而又没有计划任务的复杂性之后,开始遍历脚本以查找未运行的区域。根据需要添加更多Write-EventLog
个调用,以缩小被叫和不叫的范围。
Get-EventLog -Source "CPU supervision" -LogName Application
是多余的。这将向您显示事件日志消息,但是在计划的任务中运行时,您将看不到任何东西。
我还利用Get-Counter
的采样功能来计算几秒钟的平均值。通过这种方式,您可以更好地了解实际负载,因为即使系统受到压力,单个观测值也可能会低于您的预期。
$i = 0
$runTotal = 0.0;
$counters = Get-Counter -Counter "\Processor(_Total)\% Processor Time" -SampleInterval 3 -MaxSamples 5 | Select-Object -ExpandProperty CounterSamples | Select-Object -ExpandProperty CookedValue
$counters | foreach { $runTotal = $_ + $runTotal; $i ++}
#Raw Counter
$counters
# Mean value over 3 seconds will give you a better estimate
$runTotal/ $i