Betterment / delayed

a multi-threaded, SQL-driven ActiveJob backend used at Betterment to process millions of background jobs per day

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

cron, separate gem or pull request?

dorianmariecom opened this issue · comments

I'm thinking of porting https://github.com/codez/delayed_cron_job to delayed, should I make a separate gem or is there any change a PR would be merged?

actually I can do this by setting the next time the job will be executed from within the job, nevermind

👋 Hi @dorianmariefr -- catching up on notifications after the new year (happy 2022!) and saw this.

While delayed doesn't yet have a built-in answer for scheduled jobs, I wanted to point you to Betterment's fork of the clockwork gem: https://github.com/Betterment/clockwork

The changes in our fork are not fully reflected in the README, so I'll give you a quick overview:

  • The execution of every "tick" (once per minute) is guaranteed to occur - a new DB table is necessary and a migration generator is provided. This means that if the clock instance goes down, the next instance will be able to catch up and run all tasks that were missed.

  • We've made a couple fixes to resolve issues around daylight savings time. (Spring forward would cause 24-hour periodicity to break, skipping tasks for a day, while spring back might cause tasks to double execute.)

  • As part of the DST fixes, the ability to run things every(n.minutes) for an arbitrary "n" (or without an :at option), has been removed, since these held the last-run state in memory and would reset on every deploy. Instead, tasks must be run at specific times daily or at an exact 1.minute interval:

    • every(1.minute), will run every tick
    • every(1.day, at: specified_times) will run at specified times of day
    • every(1.day, at: %w(4:00 10:00 16:00 22:00)) will run every 6 hours

hi @smudge, thanks, happy new year too, I ended up migrating to sidekiq and sidekiq-cron