Read more

Monitor a Rake task with God

Henning Koch
October 18, 2011Software engineer at makandra GmbH

In order to monitor a Rake task using God Show archive.org snapshot your Rake file must write a file with its process ID (PID) to a path determined by God. This way God can check whether the Rake process is still alive.

Illustration web development

Do you need DevOps-experts?

Your development team has a full backlog? No time for infrastructure architecture? Our DevOps team is ready to support you!

  • We build reliable cloud solutions with Infrastructure as code
  • We are experts in security, Linux and databases
  • We support your dev team to perform
Read more Show archive.org snapshot

Here is how to do this: In your God config, call the Rake task with an environment variable PIDFILE. This variable should equal the PID file path desired by God:

God.watch do |w|
  w.dir = "#{rails_root}"
  w.name = "my_task"
  w.interval = 10.seconds
  w.pid_file = "#{rails_root}/tmp/pids/#{w.name}.pid"
  w.env = {"RAILS_ENV"=>rails_env, 'PIDFILE' => w.pid_file}
  w.start = "bundle exec rake my_task &"
  ...
end

Your Rake task should write its process ID to that PID file:

task :my_task => :environment do
  File.open(ENV['PIDFILE'], 'w') { |f| f << Process.pid } if ENV['PIDFILE']
  Model.perform_task!
end

Some advice

Don't let Ruby scripts run forever. You will run into many issues. Instead let your script terminate after some hours or X iterations and trust on God restarting the task.

Posted by Henning Koch to makandra dev (2011-10-18 12:39)