Search code examples
powershelltimeoutstart-job

Managing the running time of background jobs. Timing out if not completed after x seconds,


I would like to time my background jobs (started with start-job) and time them out after x seconds. I find it hard however to keep track of the running time on each separate job (I am running aprox 400 jobs).

I wish there was a way to time out the job and set it to failed if not completed in X seconds, but I find no timeout-parameter.

What would be a good way to track the individual run-time of the jobs?

I guess I could create a hashtable with start-time of each job and the job-id and check against the running state and do a manual timeout, but that sounds kinda "inventing the wheel". Any ideas?

Edit Thank you everyone for a fruitful discussion and great inspiration on this topic!


Solution

  • You can use a hash table of timers:

     $jobtimer = @{}
    
     foreach ($job in $jobs){
       start-job -name $job -ScriptBlock {scriptblock commands}
       $jobtimer[$job] = [System.Diagnostics.Stopwatch]::startnew()
       }
    

    The running time of each job will be in $jobtimer[$job].elapsed