Posted over 5 years ago. Visible to the public.

Monitor a Rake task with God

In order to monitor a Rake task using God 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.

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: do |w| w.dir = "#{rails_root}" = "my_task" w.interval = 10.seconds w.pid_file = "#{rails_root}/tmp/pids/#{}.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['PIDFILE'], 'w') { |f| f << } 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 30 minutes or X iterations and trust on God restarting the task.

makandra has been working exclusively with Ruby on Rails since 2007. Our laser focus on a single technology has made us a leader in this space.

Author of this card:

Henning Koch
About this deck:
We are makandra and do test-driven, agile Ruby on Rails software development.
License for source code
Posted by Henning Koch to makandropedia