[Backgroundrb-devel] Recommendations for eternally-running backgroundrb workers?

Mason Hale masonhale at gmail.com
Wed May 23 11:49:00 EDT 2007


hit send prematurely...

my_worker:
   :class: :polling_worker
   :job_key: :my_worker
   :worker_method: :do_work
   :worker_method_args:
      :arg1: placeholder
   :trigger_args:
     :start: <%= Time.now + 1.seconds %>

Note there is not :repeate_interval: argument under :trigger_args:

In your worker class it could look like:


  def do_work(args)
    logger.debug("#{self.jobkey}: do_work called")
    loop do # loop forever
        check_for_work # this is the method that really does the work
        sleep 60
      end
    end
  end

You should see the "do_work called" message once.

The fact that do_work does not return should not matter, the other scheduled
jobs will still run.

I use the method above in production with a high level of reliability.

Mason


On 5/23/07, Mason Hale <masonhale at gmail.com> wrote:
>
> Jack -- you can use the scheduler to fire up long-running processes.
>
> Just don't specify a repeat interval.
>
> You backgroundrb_schedules.yml file should look something like:
>
> my_worker:
>    :class: :polling_worker
>    :job_key: :my_worker
>    :worker_method: :do_work
>    :worker_method_args:
> placeholder
>    :trigger_args:
>      :start: <%= Time.now + 1.seconds %>
>
> On 5/22/07, Jack Nutting <jnutting at gmail.com> wrote:
> >
> > I've got some workers that I want to have running all the time.  Right
> > now I'm just launching them manually, by requesting a special page in
> > my rails app that includes lines like:
> >
> >       MiddleMan.new_worker (:class=> :receiver, :job_key=>:r,
> > :args=>{:sleep_time=>10})
> >
> > This strikes me as a really weak way to fire up my workers.  I
> > basically want to automate things so that these will be started by a
> > script in /etc/rc?.d.  It seems like using the backgroundrb scheduler
> > is not a possibility, since do_work never returns from my workers
> > (each of them runs in an infinite loop, polling the database
> > periodically to look for work).  So it looks like I need another
> > startup script, running after the rest of the system is up, that does
> > one of these things:
> >
> > - use curl or wget to hit my special worker-starting page (how lame is
> > that?)
> > - pipe my MiddleMan.new_worker calls into a "script/backgroundrb
> > console" or just "script/console" session (is that any better?)
> >
> > As you can see, neither of these options seems very appealing to me.
> > I can't be the first person to do this...  How are others handling
> > this?
> >
> > --
> > // jack
> > // http://www.nuthole.com
> > _______________________________________________
> > Backgroundrb-devel mailing list
> > Backgroundrb-devel at rubyforge.org
> > http://rubyforge.org/mailman/listinfo/backgroundrb-devel
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://rubyforge.org/pipermail/backgroundrb-devel/attachments/20070523/960cad0f/attachment.html 


More information about the Backgroundrb-devel mailing list