16

Is it possible to create a recurring job in Hangfire that executes after a given number of days, say 8.

The nearest I found was to execute a job once in a week -

RecurringJob.AddOrUpdate("MyJob",() => ScheduledJob(), Cron.Weekly());

Understanding that Hangfire also accepts standard CronExpression, I've tried exploring cron expression for this frequency but couldn't found one for it- https://en.wikipedia.org/wiki/Cron

One ugly solution could be to create 3 or 4 jobs that executes once in month at some dates accordingly, but I don't want to do that.

Any suggestions please.

Yogi
  • 9,174
  • 2
  • 46
  • 61

2 Answers2

31

Finally I have used CronExpression like this to schedule a recurring job with frequency of every 8 days or for any number of days for that matter.

string cronExp = "* * */8 * *";
RecurringJob.AddOrUpdate("MyJob",() => ScheduledJob(), cronExp);

The third segment in CronExpression represents day of month.

The respective segments are as follows - (Ref: https://en.wikipedia.org/wiki/Cron)

enter image description here

Yogi
  • 9,174
  • 2
  • 46
  • 61
  • 1
    I am in a similar situation. I am trying to execute a method at 23:58 everyday. The method seems to be running but it is running multiple times at 23:58. Following the code. I don't whats going on. Thanks for your insights. RecurringJob.AddOrUpdate(() => new DailyStatistics().Send(), Cron.Daily(3,58)); – Rohit Jun 26 '18 at 21:53
  • 3
    actually this have to be `0 * */8 * *` instead of `* * */8 * *` In your case it will run on each minute of each 8th day. – Georgi Gevorgyan Dec 15 '19 at 23:37
  • This is completely wrong! this will not run on every 8 day intervals, it will run on at every minute on every 8th day-of-month lol – 0014 Oct 01 '22 at 17:42
15

A more cleaner Solution will be to use Cron.DayInterval(interval).

For your case it will be

RecurringJob.AddOrUpdate("MyJob",() => ScheduledJob(), Cron.DayInterval(8));
Athul Dilip
  • 183
  • 1
  • 9