Sun*_*une 5 powershell timeout start-job
我想对后台作业(以开头start-job)进行计时,并在x几秒钟后将其超时。但是,我很难跟踪每个单独作业的运行时间(我正在运行aprox 400作业)。
我希望有一种方法来超时工作,并将其设置为failed如果不是completed在X秒,但我觉得没有超时参数。
什么是跟踪作业的各个运行时间的好方法?
我想我可以用每个作业的开始时间和作业ID创建一个哈希表,并对照running状态进行检查并进行手动超时,但这听起来有点像“发明轮子”。有任何想法吗?
编辑 谢谢大家在这个主题上进行了富有成果的讨论和启发!
您可以指定超时选项Wait-Job:
-暂停
确定每个后台作业的最长等待时间(以秒为单位)。默认值 -1,无论作业运行多长时间,都会等待作业完成。计时从您提交 Wait-Job 命令而非 Start-Job 命令时开始。
如果超过此时间,即使作业仍在运行,等待也会结束并返回命令提示符。不显示错误消息。
这是一些示例代码:
这部分只是做了一些测试工作:
Remove-Job -Name *
$jobs = @()
1..10 | % {
$jobs += Start-Job -ScriptBlock {
Start-Sleep -Seconds (Get-Random -Minimum 5 -Maximum 20)
}
}
Run Code Online (Sandbox Code Playgroud)
该变量$timedOutJobs包含超时的作业。然后你可以重新启动它们或者你有什么。
$jobs | Wait-Job -Timeout 10
$timedOutJobs = Get-Job | ? {$_.State -eq 'Running'} | Stop-Job -PassThru
Run Code Online (Sandbox Code Playgroud)
您可以使用计时器的哈希表:
$jobtimer = @{}
foreach ($job in $jobs){
start-job -name $job -ScriptBlock {scriptblock commands}
$jobtimer[$job] = [System.Diagnostics.Stopwatch]::startnew()
}
Run Code Online (Sandbox Code Playgroud)
每个作业的运行时间将在$ jobtimer [$ job] .elapsed中
| 归档时间: |
|
| 查看次数: |
10289 次 |
| 最近记录: |