rack_env = "<%= @node[:environment][:framework_env] %>" app_root = "/data/awsm/current" owner = "<%= @node[:owner_name] %>" home = "/home/#{owner}" instance_id = "<%= @node.engineyard.id %>" inline = "#{home}/.ruby_inline/resque-scheduler" God.watch do |w| w.name = "resque-scheduler" w.group = 'resque' w.uid = owner w.gid = owner w.interval = 30.seconds w.log = "#{app_root}/log/resque_scheduler.log" w.dir = app_root w.env = { "VERBOSE" => "true", "INSTANCE_ID" => instance_id, "GOD_WATCH" => w.name, "RACK_ENV" => rack_env, "MERB_ENV" => rack_env, "LANG" => "en_US.utf-8", "HOME" => home, "INLINEDIR" => inline } w.start = "bundle exec rake --trace resque:scheduler" w.behavior(:clean_pid_file) w.start_grace = 2.minutes w.restart_grace = 2.minutes # retart if memory gets too high w.transition(:up, :restart) do |on| on.condition(:memory_usage) do |c| c.above = 350.megabytes c.times = 2 end end # determine the state on startup w.transition(:init, { true => :up, false => :start }) do |on| on.condition(:process_running) do |c| c.running = true end end # determine when process has finished starting w.transition([:start, :restart], :up) do |on| on.condition(:process_running) do |c| c.running = true c.interval = 5.seconds end # failsafe on.condition(:tries) do |c| c.times = 5 c.transition = :start c.interval = 5.seconds end end # start if process is not running w.transition(:up, :start) do |on| on.condition(:process_running) do |c| c.running = false end end end