Recently I had to deploy some code to a server, and part of it required me to run init scripts that backgrounded processes using &, which Capistrano doesn’t play well with. The processes would terminate when Capistrano was finished with the deployment.
As a fix, I ended up writing a task manager using the “daemons ruby gem”:http://daemons.rubygems.org.
In this case, we have some Ruby scripts that are “gearman”:http://www.gearman.org workers. This solution has a nice side-effect of giving us process control and pid-files as well for free!
require 'rubygems'
require 'daemons'
this_dir = File.expand_path(File.dirname(__FILE__))
files = Dir.glob("#{this_dir}/workers/*.rb")
workername = ARGV.shift
files.each do |script|
worker = script.split("/")[-1]
if worker == workername
Daemons.run(script)
end
end