A critical vulnerability was discovered in React Server Components (Next.js). Our systems remain protected but we advise to update packages to newest version. Learn More


Apr 26, 2012
  3198
(0 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

Comments

Please login to comment.
Latest blogs
A day in the life of an Optimizely OMVP: Learning Optimizely Just Got Easier: Introducing the Optimizely Learning Centre

On the back of my last post about the Opti Graph Learning Centre, I am now happy to announce a revamped interactive learning platform that makes...

Graham Carr | Jan 31, 2026

Scheduled job for deleting content types and all related content

In my previous blog post which was about getting an overview of your sites content https://world.optimizely.com/blogs/Per-Nergard/Dates/2026/1/sche...

Per Nergård (MVP) | Jan 30, 2026

Working With Applications in Optimizely CMS 13

💡 Note:  The following content has been written based on Optimizely CMS 13 Preview 2 and may not accurately reflect the final release version. As...

Mark Stott | Jan 30, 2026

Experimentation at Speed Using Optimizely Opal and Web Experimentation

If you are working in experimentation, you will know that speed matters. The quicker you can go from idea to implementation, the faster you can...

Minesh Shah (Netcel) | Jan 30, 2026