Delayed::Cron::Job is an extension to Delayed::Job that allows you to set cron expressions for your jobs to run repeatedly.
Add this line to your application's Gemfile:
gem 'delayed_cron_job'
And then execute:
$ bundle
If you are using delayed_job_active_record
, generate a migration (after the
original delayed job migration) to add the cron
column to the delayed_jobs
table:
$ rails generate delayed_job:cron
$ rake db:migrate
There are no additional steps for delayed_job_mongoid
.
When enqueuing a job, simply pass the cron
option, e.g.:
Delayed::Job.enqueue(MyRepeatedJob.new, cron: '15 */6 * * 1-5')
Or, when using Active Job:
MyJob.set(cron: '*/5 * * * *').perform_later
Any crontab compatible cron expressions are supported (see man 5 crontab
).
The credits for the Cronline
class used go to
rufus-scheduler.
## Details
The initial run_at
value is computed during the #enqueue
method call.
If you create Delayed::Job
database entries directly, make sure to set
run_at
accordingly.
You may use the id
of the Delayed::Job
as returned by the #enqueue
method
to reference and/or remove the scheduled job in the future.
The subsequent run of a job is only scheduled after the current run has
terminated. If a single run takes longer than the given execution interval,
some runs may be skipped. E.g., if a run takes five minutes, but the job is
scheduled to be executed every second minute, it will actually only execute
every sixth minute: With a cron of */2 * * * *
, if the current run starts at
:00
and finishes at :05
, then the next scheduled execution time is at :06
,
and so on.
If you do not want longer running jobs to skip executions, simply create a lightweight master job that enqueues the actual workload as separate jobs. Of course you have to make sure to start enough workers to handle all these jobs.
- Fork it ( https://github.com/codez/delayed_cron_job/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request