繁体   English   中英

延迟的作业:延迟的作业任务挂起

[英]Delayed Job: Delayed job task hangs

我正在使用延迟的作业来执行后台作业。 我正在使用命令RAILS_ENV=production bin/delayed_job -n 5 start运行延迟的作业

当我开始延迟作业并检查延迟作业时,它表明作业正在运行。 当我在1个小时的延迟作业状态之后再次检查延迟作业时,所有作业的状态仍为“运行中”。 所有作业本应在15分钟内完成,但即使在1个小时后仍显示为运行状态。 请帮忙。

以下是我延迟的作业日志文件内容。

I, [2015-12-22T13:10:56.463154 #15255]  INFO -- : 2015-12-22T13:10:56+0000: [Worker(delayed_job.0 host:ip-172-31-6-58 pid:15255)] Job QrCodeGenerator (id=16) RUNNING
I, [2015-12-22T13:10:56.467157 #15261]  INFO -- : 2015-12-22T13:10:56+0000: [Worker(delayed_job.1 host:ip-172-31-6-58 pid:15261)] Job QrCodeGenerator (id=17) RUNNING
I, [2015-12-22T13:10:56.544987 #15267]  INFO -- : 2015-12-22T13:10:56+0000: [Worker(delayed_job.2 host:ip-172-31-6-58 pid:15267)] Job QrCodeGenerator (id=15) RUNNING

正在运行的作业的状态如下。

 => #<Delayed::Backend::ActiveRecord::Job id: 15, priority: 0, attempts: 0, handler: "--- !ruby/struct:QrCodeGenerator\nclient: !ruby/obj...", last_error: nil, run_at: "2015-12-22 11:57:28", locked_at: "2015-12-22 13:10:56", failed_at: nil, locked_by: "delayed_job.2 host:ip-172-31-6-58 pid:15267", queue: nil, created_at: "2015-12-22 09:07:39", updated_at: "2015-12-22 11:57:51">
2.0.0-p598 :004 >

 => #<Delayed::Backend::ActiveRecord::Job id: 16, priority: 0, attempts: 0, handler: "--- !ruby/struct:QrCodeGenerator\nclient: !ruby/obj...", last_error: nil, run_at: "2015-12-22 09:08:06", locked_at: "2015-12-22 13:10:56", failed_at: nil, locked_by: "delayed_job.0 host:ip-172-31-6-58 pid:15255", queue: nil, created_at: "2015-12-22 09:08:06", updated_at: "2015-12-22 09:08:06">

 => #<Delayed::Backend::ActiveRecord::Job id: 17, priority: 0, attempts: 0, handler: "--- !ruby/struct:QrCodeGenerator\nclient: !ruby/obj...", last_error: nil, run_at: "2015-12-22 09:08:44", locked_at: "2015-12-22 13:10:56", failed_at: nil, locked_by: "delayed_job.1 host:ip-172-31-6-58 pid:15261", queue: nil, created_at: "2015-12-22 09:08:44", updated_at: "2015-12-22 09:08:44">

我在延迟工作中插入工作的代码如下。

QrCodeGenerator = Struct.new(:client,:request,:quantity) do
  def perform
      AuthenticationCode.save_qr_codes(client,request,quantity)
  end

  def error(job, exception)
    if request.status != "completed"
      request.update_attributes(:status => "failed")
    end
  end

  def destroy_failed_jobs?
    true
  end

  def max_attempts
    1
  end

end

我想您已经将工作排队到其他地方了。 因此,问题就是工作为什么继续运行。

我认为您应该首先确保确实启动/启动了流程。

然后,宝石delayed_job_web是监视进程状态的有用接口

在另一方面,你可以尝试设置max_run_time ,看是否delayed_job如预期的那样发挥作用。

# config/initializers/delayed_job_config.rb
Delayed::Worker.max_run_time = 5.minutes

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM