A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | AA | AB | AC | AD | AE | AF | AG | AH | AI | AJ | AK | AL | AM | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | system | rails instance per run | can run standalone from background job processor | easily invoke ruby code without clumsy prefix, quoting, etc. | jobs are defined as ruby code, not strings | jobs and schedules are defined in different places | schedule is defined in codebase | jobs run in rails executor | can run jobs in parallel | Easily provide an error handler | Easily run rake tasks within persistent rails instance | Easily run commandline processes | rails only | before and after callbacks | around callbacks | Job must be defined as an ActiveJob | job definitions in database | Web UI | updated | lines of code cloc --exclude-lang="Text,Markdown" | cost | notes | syntax supported [this column is incomplete] | |||||||||||||||||
2 | ruby-clock | no | yes | yes | yes | no | yes | yes | yes | yes | yes | yes | no | yes | yes | no | no | no | 2022 | 153 | cron, period, specific time | |||||||||||||||||||
3 | clockwork | no | yes | yes | no [sort of] | no [sort of] | yes | no | yes [not by default] | yes | no? | no? | no? | yes | no | no | yes | no | 2021 | 1,706 | • https://github.com/Rykian/clockwork/issues • https://github.com/Rykian/clockwork/pulls • Betterment fork: https://github.com/Betterment/clockwork | period, specific time | ||||||||||||||||||
4 | crono | no | yes | yes | yes | yes | yes | no | yes | no | no? | no? | yes | no | no | no | no | yes | 2022 | 1,597 | https://github.com/plashchynski/crono/issues | |||||||||||||||||||
5 | sidekiq-scheduler | no | no https://github.com/moove-it/sidekiq-scheduler/issues?q=independent | yes | yes | yes | yes | yes | yes | no? | no? | no | no | no | yes | no | yes | 2022 | 3,147 | cron, period, specific time | ||||||||||||||||||||
6 | sidekiq-cron | no | no | yes | yes | yes | yes | yes | yes | no? | no? | no | no | no | yes | no | yes | 2022 | 2,576 | cron | ||||||||||||||||||||
7 | sidecloq | no | no | yes | yes | yes | yes | yes | yes | no? | no? | no | no | no | yes | no | yes | 2019 | 1,069 | |||||||||||||||||||||
8 | mini_scheduler | no | no | yes | yes | no | yes | yes | yes | yes | no? | no? | no? | no | no | yes | no | yes | 2022 | 1,371 | ||||||||||||||||||||
9 | sidekiq enterprise | no | no | yes | yes | yes? | yes | yes | yes | no? | no? | no | no | no | yes | no | yes? | ongoing | $230/month | https://github.com/mperham/sidekiq/wiki/Ent-Periodic-Jobs also get other features of Sidekiq Pro+Enterprise https://sidekiq.org | ||||||||||||||||||||
10 | GoodJob cron | no | no | no | no | yes | yes | yes | yes | yes? | no? | no | yes | no (can define for ActiveJob, but can't define only for cron jobs) | no (can define for ActiveJob, but can't define only for cron jobs) | yes | no | yes | ongoing | GoodJob is an awesome background job processor, this matrix is only comparing its cron capabilities. GoodJob and ruby-clock are a great pair, and also Ben is awesome! | uses fugit, so probably supports everything | |||||||||||||||||||
11 | heroku scheduler | yes [but each job gets its own instance, so it's a different resource problem] | yes | no | no | yes | no | yes | yes | no | no? | no? | no | no | no | no | yes [functionally] | no | ongoing | |||||||||||||||||||||
12 | *nix cron | yes | yes | no | no | yes | no | yes | yes | no | no? | no? | no | no | no | no | no | no | ongoing | |||||||||||||||||||||
13 | whenever | yes | yes | no | no | yes | yes | yes | yes | no | no? | no? | no | no | no | no | no | no | 2020 | |||||||||||||||||||||
14 | perfectsched | yes? | yes? | no | no? | no? | no | no | 2018 | 2,252 | claims "one-at-least-once" behavior but doesn't really describe the criteria/thresholds (if a 1pm job is missed because of a restart and server comes back at 1:02, does something special happen?) | |||||||||||||||||||||||||||||
15 | ||||||||||||||||||||||||||||||||||||||||
16 | ||||||||||||||||||||||||||||||||||||||||
17 | ||||||||||||||||||||||||||||||||||||||||
18 | ||||||||||||||||||||||||||||||||||||||||
19 | ||||||||||||||||||||||||||||||||||||||||
20 | ||||||||||||||||||||||||||||||||||||||||
21 | ||||||||||||||||||||||||||||||||||||||||
22 | ||||||||||||||||||||||||||||||||||||||||
23 | ||||||||||||||||||||||||||||||||||||||||
24 | ||||||||||||||||||||||||||||||||||||||||
25 | ||||||||||||||||||||||||||||||||||||||||
26 | ||||||||||||||||||||||||||||||||||||||||
27 | ||||||||||||||||||||||||||||||||||||||||
28 | ||||||||||||||||||||||||||||||||||||||||
29 | ||||||||||||||||||||||||||||||||||||||||
30 | ||||||||||||||||||||||||||||||||||||||||
31 | ||||||||||||||||||||||||||||||||||||||||
32 | ||||||||||||||||||||||||||||||||||||||||
33 | ||||||||||||||||||||||||||||||||||||||||
34 | ||||||||||||||||||||||||||||||||||||||||
35 | ||||||||||||||||||||||||||||||||||||||||
36 | ||||||||||||||||||||||||||||||||||||||||
37 | ||||||||||||||||||||||||||||||||||||||||
38 | ||||||||||||||||||||||||||||||||||||||||
39 | ||||||||||||||||||||||||||||||||||||||||
40 | ||||||||||||||||||||||||||||||||||||||||
41 | ||||||||||||||||||||||||||||||||||||||||
42 | ||||||||||||||||||||||||||||||||||||||||
43 | ||||||||||||||||||||||||||||||||||||||||
44 | ||||||||||||||||||||||||||||||||||||||||
45 | ||||||||||||||||||||||||||||||||||||||||
46 | ||||||||||||||||||||||||||||||||||||||||
47 | ||||||||||||||||||||||||||||||||||||||||
48 | ||||||||||||||||||||||||||||||||||||||||
49 | ||||||||||||||||||||||||||||||||||||||||
50 | ||||||||||||||||||||||||||||||||||||||||
51 | ||||||||||||||||||||||||||||||||||||||||
52 | ||||||||||||||||||||||||||||||||||||||||
53 | ||||||||||||||||||||||||||||||||||||||||
54 | ||||||||||||||||||||||||||||||||||||||||
55 | ||||||||||||||||||||||||||||||||||||||||
56 | ||||||||||||||||||||||||||||||||||||||||
57 | ||||||||||||||||||||||||||||||||||||||||
58 | ||||||||||||||||||||||||||||||||||||||||
59 | ||||||||||||||||||||||||||||||||||||||||
60 | ||||||||||||||||||||||||||||||||||||||||
61 | ||||||||||||||||||||||||||||||||||||||||
62 | ||||||||||||||||||||||||||||||||||||||||
63 | ||||||||||||||||||||||||||||||||||||||||
64 | ||||||||||||||||||||||||||||||||||||||||
65 | ||||||||||||||||||||||||||||||||||||||||
66 | ||||||||||||||||||||||||||||||||||||||||
67 | ||||||||||||||||||||||||||||||||||||||||
68 | ||||||||||||||||||||||||||||||||||||||||
69 | ||||||||||||||||||||||||||||||||||||||||
70 | ||||||||||||||||||||||||||||||||||||||||
71 | ||||||||||||||||||||||||||||||||||||||||
72 | ||||||||||||||||||||||||||||||||||||||||
73 | ||||||||||||||||||||||||||||||||||||||||
74 | ||||||||||||||||||||||||||||||||||||||||
75 | ||||||||||||||||||||||||||||||||||||||||
76 | ||||||||||||||||||||||||||||||||||||||||
77 | ||||||||||||||||||||||||||||||||||||||||
78 | ||||||||||||||||||||||||||||||||||||||||
79 | ||||||||||||||||||||||||||||||||||||||||
80 | ||||||||||||||||||||||||||||||||||||||||
81 | ||||||||||||||||||||||||||||||||||||||||
82 | ||||||||||||||||||||||||||||||||||||||||
83 | ||||||||||||||||||||||||||||||||||||||||
84 | ||||||||||||||||||||||||||||||||||||||||
85 | ||||||||||||||||||||||||||||||||||||||||
86 | ||||||||||||||||||||||||||||||||||||||||
87 | ||||||||||||||||||||||||||||||||||||||||
88 | ||||||||||||||||||||||||||||||||||||||||
89 | ||||||||||||||||||||||||||||||||||||||||
90 | ||||||||||||||||||||||||||||||||||||||||
91 | ||||||||||||||||||||||||||||||||||||||||
92 | ||||||||||||||||||||||||||||||||||||||||
93 | ||||||||||||||||||||||||||||||||||||||||
94 | ||||||||||||||||||||||||||||||||||||||||
95 | ||||||||||||||||||||||||||||||||||||||||
96 | ||||||||||||||||||||||||||||||||||||||||
97 | ||||||||||||||||||||||||||||||||||||||||
98 | ||||||||||||||||||||||||||||||||||||||||
99 | ||||||||||||||||||||||||||||||||||||||||
100 |