Try our conversational search powered by Generative AI!

Lee Crowe
Apr 26, 2012
(4 votes)

EPiServer Schedule Job Maintenance EPiServer CMS 6

In the past I have been plagued with issues where EPiServer scheduled jobs have suddenly stopped working and get stuck in a running state.  This is possibly caused by application restarts/redeployments while jobs are in progress and many other issues.

I am pretty sure these particular issues may well have been fixed in hotfixes or service packs, but from past experience I have become very cautious about scheduled jobs and there reliability especially if you are using them for site critical functionality.

Because of my scepticism about scheduled job reliability I have knocked together a class which should get a job up and running if it gets stuck in a running state.

My Solution

Firstly you will have to download this class ScheduledJobMaintenance.cs and add it to your solution.

You will then need to hook into the begin request method within your Global.asax.cs file and add a call to ScheduledJobMaintenance.CheckScheduledJobs().

  1: protected void Application_BeginRequest(object sender, EventArgs e)
  2: {
  3:    ScheduledJobMaintenance.CheckScheduledJobs();
  4: }

The ScheduleJobMaintenance class has the following static properties:

  • MaximumJobRunTimeInMinutes – This defines the maximum length of time a job can be in a running state, the default is 60 minutes.
  • CheckTimeInMinutes – This defines the duration in minutes running jobs should be checked, the default is 11 minutes don’t ask me why Smile.

What does it do?

Every time a request is made to the site the CheckScheduledJobs method will be called.  This will then check the last time a check was made, if the duration has gone over the CheckTimeInMinutes then it will do the following:

  • Queue a new thread.
  • Check if there are any jobs in a running state that have gone over the maximum job running time.
  • If there are jobs that have met the previous condition then it will set the next execution time to be in the future, the way this is set is determined by the IntervalType.
  • Update the relevant rows in the tblScheduledItem table to turn them into runnable jobs again.
  • Update the last check time.

For info this currently does not fix jobs that have IntervalType’s of Years or Seconds.

Apr 26, 2012


Debasish Banerjee
Debasish Banerjee Apr 27, 2012 09:31 AM

Nice..We had this issue in our project and we created a dashboard to check which schedulers got stuck.But This solution is far better.

Arild Henrichsen
Arild Henrichsen Apr 29, 2012 05:07 PM

Great idea Lee. A tool like this should have been an integrated part of EPiServer admin mode long ago.

Mads Frisk Sørensen
Mads Frisk Sørensen Apr 25, 2019 10:05 AM


We have inherited a old solution that uses this fix. They have upgraded to Episerver 8.2 at some point in time. Is this fix still relevant, or was it only for Episerver 6?

Please login to comment.
Latest blogs
Migrate Catalog content properties

A colleague asked me yesterday – how do we migrate properties of catalog content. There is, unfortunately, no official way to do it. There are...

Quan Mai | Feb 20, 2024 | Syndicated blog

Adjust log levels in Optimizely DXP

You may adjust the log levels for your site in Optimizely DXP yourself, but only for the Integration environment. Follow this step-by-step guide.

Tomas Hensrud Gulla | Feb 20, 2024 | Syndicated blog

Introducing Search & Navigation Dashboard for Resource Usage

We're excited to unveil the latest addition to the Search & Navigation suite: a dashboard designed to proactively monitor your resource usage. It's...

Edvin Dackelid Johansson | Feb 20, 2024

Introducing Jhoose Security Module V2.0

Version V2.0 of the Jhoose Security module has been released and is available via the Optimizely nuget feed. This update not only squashes several...

Andrew Markham | Feb 19, 2024 | Syndicated blog

ExtendedCms.TinyMceEnhancements – support for video tag

In my previous post I showed Full Width for TinyMCE. In this article I will describe another feature for ExtendedCms.TinyMceEnhancements addon,...

Grzegorz Wiecheć | Feb 19, 2024 | Syndicated blog

Copy database and blobs to Optimizely DXP

It's easier than ever to import blobs and databases into the Optimizely DXP integration environment without involving support.

Tomas Hensrud Gulla | Feb 16, 2024 | Syndicated blog