我需要一个用于大型动态任务集合的调度程序.目前我正在寻找resque-scheduler,rufus-scheduler和clockwork.我将非常感谢您选择使用哪一个(或替代方案).
一些细节:
总而言之,我需要像Ruby项目那样的cron,它可以处理大量动态变化的任务集合.
更新:我花了一天时间尝试调度库,现在我想简要总结一下新获得的经验.
我已经停止了对Clockwork和resque-scheduler库的关注,因为这些是更成熟的项目,有更详细的文档.Resque-scheduler基于rufus-scheduler,而Clockwork受其启发,两者都可以用于我正在寻找的解决方案.
两者都是应该在单独进程中运行的独立服务,可以处理为单个或经常执行而安排的几乎无限量的任务.任务在线程内执行.
发条专业人士:
发条缺点:
我已经为Clockwork实现了一个替代的Manager类(这是控制调度的gem的核心部分),以允许通过ZeroMQ消息进行调度控制.因此,我的项目中的主要服务可以向调度程序发送命令,例如"每天运行"或"取消调度任务#10",并且调度程序立即执行每个请求.
我对resque-scheduler的经验较少,但此时它似乎是一个更好的解决方案.
resque-scheduler专业人士:
Resque.remove_schedule(name)
以删除特定任务.resque调度:
仔细观察后可能会出现其他东西,但目前还没有别的东西.
这就是我现在拥有的.顺便说一下,我在GitHub上发布了许多与调度相关的Ruby gem的链接.
我正在使用 Ruby on Rails 5.2.0 开发系统,我需要每 2 分钟运行一次作业。我sidekiq
用于后台处理和sidekiq-cron
调度作业。
我在 rails 控制台中执行以下行:
job=Sidekiq::Cron::Job.new( name: 'TestWorker_Job', cron: '*/2 * * * *', klass: 'PriceWorker')
Run Code Online (Sandbox Code Playgroud)
这就是答案
=> #<Sidekiq::Cron::Job:0x000055b6d54707e8
@active_job=false,
@active_job_queue_name_delimiter=nil,
@active_job_queue_name_prefix=nil,
@args=[],
@cron="*/2 * * * *",
@fetch_missing_args=true,
@klass="PriceWorker",
@last_enqueue_time=nil,
@message={"retry"=>false, "queue"=>"default", "class"=>"PriceWorker", "args"=>[]},
@name="TestWorker_Job",
@queue="default",
@queue_name_with_prefix="default",
@status="enabled">
Run Code Online (Sandbox Code Playgroud)
但它给我一个错误:
job.errors
=> ["'cron' -> */2 * * * *: uninitialized constant Rufus::Scheduler::CronLine"]
Run Code Online (Sandbox Code Playgroud)
没有有效的工作。我不知道我做错了什么。Sidekiq-cron github 页面做同样的事情。