Back

delayed_job: max_run_time 一定不要设定过短 ( max_run_time should be shorter than any kind of job )

发布时间: 2014-05-18 08:45:00

今天被这个问题搞死了。 ( I am almost beaten by this issue today) 

有两种JOB: 一种是父JOB, 专门生成子job. 一种是 "子job"  ( I have 2 kinds of job: spawner job which generates normal jobs, normal job)

前者 耗时比较久, 5分钟左右, 后者3秒以内。 ( the spawner lasts minutes, and normal jobs last less than 3 seconds) 

今天发现的问题是:  父JOB正常来说应该只运行一次,结果发现它会运行2~3次不等。 ( today I found that spawner job always run more than I time) 

弄了3个小时以后才发现问题:  配置 中的 max_run_time 太短了,导致每次delayed_job 都以为正常运行的父JOB失败了呢。结果第二个WORKER就开始工作了。。。 ( after 3 hours I found the root cause: I set max_run_time too short ( 1 minute ))

  ( 看到了吗? 每次都差1分钟)
sg552@youku:/sg552/workspace/m-cms-static-page-generator/log$ grep 'generating' delayed_job_2014-05-18.log 
16:42:25 INFO: == a plan is generating 1512 files/jobs 
16:43:26 INFO: == a plan is generating 1512 files/jobs 

解决办法: 增加 max_run_time, 让它不短于任何一种job:   ( solution is: increase the "max_run_time" option to make it longer than any job) 

 (修改 max_run_time )
# -*- encoding : utf-8 -*-
# config/initializers/delayed_job_config.rb
Delayed::Worker.destroy_failed_jobs = false
Delayed::Worker.sleep_delay = 10
Delayed::Worker.max_attempts = 5 
Delayed::Worker.max_run_time = 30.minutes  
Delayed::Worker.read_ahead = 10
Delayed::Worker.default_queue_name = 'default'

Back