I just hacked the daemon cruise init script to work properly on reboot
on my debian (ubuntu) server.  On debian bootup, there is a very
minimal root-user environment, so you have to do some extra steps to
make it run at all, and run as a non-root user.

The important changes are:
* shebang fully qualified to point to ruby exec
* manually populate PATH env to contain ruby (/usr/local/...)
* add cruise_user method to define local user used to run cruise
* invoke 'start' command as specified cruise_user

Here's what I currently have, hopefully it will help someone.  If you
want this committed, it could use a little cleanup, and might not be
as portable as the old version - let me know if you are interested and
I can try to make a ticket/patch:

-----------------

#!/usr/local/bin/ruby

ENV['PATH']="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11"

# in order to make cruise run as daemon, you need:
# 1. cp $CCRB_HOME/daemon/cruise.sample $CCRB_HOME/daemon/cruise
# 2. specify your cruise_path to $CCRB_HOME in $CCRB_HOME/daemon/cruise file
# 3. ln -s $CCRB_HOME/daemon/cruise /etc/init.d/cruise (you may need
to 'sudo' this)
# 4. update-rc.d cruise (you may want to choose options by yourself,
and you may need to 'sudo' this)
# 5. it's done :>

require "fileutils"
include FileUtils

require "rubygems"

begin
  gem 'mongrel'
rescue => e
  puts "Error: daemon mode of CC.rb requires mongrel installed"
  exit 1
end

def cruise_path
  "/home/woolley/workspace/cruisecontrolrb"
end

def cruise_user
  "woolley"
end

command = ARGV.shift

case command
when 'start'
  #cd cruise_path
  system "su - woolley -c 'cd #{cruise_path} && ./cruise start -d'"
  exit 0
when 'stop'
  system "mongrel_rails stop -P #{cruise_path}/tmp/pids/mongrel.pid"
  Dir["#{cruise_path}/tmp/pids/builders/*.pid"].each do |pid_file|
    pid = File.open(pid_file){|f| f.read }
    system "kill -9 #{pid}"
    rm pid_file
  end
  exit 0
else
  p "Usage: /etc/init.d/cruise start|stop"
  exit 1
end
_______________________________________________
Cruisecontrolrb-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/cruisecontrolrb-users

Reply via email to