Make delayed job run at specific date time


I want to send some emails through delayed_job

However, I want to send them before and after an event.

My concern is if this will actually work:

def one_week_before_run
  AtendeeMailer.delay(run_at: '8th October 2016'.to_datetime).mudrun_about_to_start(self)

def thank_you_note
  AtendeeMailer.delay(run_at: '18th October 2016'.to_datetime.end_of_day).thank_you(self)

or should I choose another approach?


Delayed job picks a job to execute only if the run_at <= current time. Refer DJ's query to pick job

SELECT `delayed_jobs`.* FROM `delayed_jobs` WHERE ((run_at <= '2016-09-27 00:49:59' AND (locked_at IS NULL OR locked_at < '2016-09-27 00:24:59') OR locked_by = 'host:Madhubalans-Air pid:74314') AND failed_at IS NULL) ORDER BY priority ASC, run_at ASC LIMIT 1

Your code is setting run_at to 2016-10-18 00:00:00 and 2016-10-18 23:59:59. So your code will work as per your expectation :)

It looks like a strange issue.

For now, I can suggest you do the following things:

  • Check if your *.jar file is executable. Type sudo chmod +x /opt/xxxx/xxxx-0.0.1.jar to be sure about that and start service again.
  • Try to copy *.jar file to /etc/init.d/ directory instead of creating link. Type cp /opt/xxxx/xxxx-0.0.1.jar /etc/init.d/ and start service again.

Let me know if it helped. If not, maybe we can figure out a different solution.


This video can help you solving your question :)
By: admin