Thanks Colin.

Messing with your monkey patch a bit, it seems the modification to
spawn() isn't required for me to get god to work on CENTOS. Just
patching the fetch_system_profiler() fixes it.

I managed to simplify it down to this so far:

module God
  module System
    class SlashProcPoller
      def self.usable?
        false
      end
    end
  end
end

So it's obviously a bug in that poller, i'll start debugging and see
if I can't dig up a patch for the god repo.


regards,
Danial

On Nov 7, 1:21 am, "Colin Steele" <[EMAIL PROTECTED]> wrote:
> module God
>   module System
>     class Process
>       alias_method :orig_fetch_system_poller, :fetch_system_poller
>       def fetch_system_poller
>         if `hostname` =~ /YOUR CENTOS HOST(S) HERE/
>           PortablePoller
>         else
>           orig_fetch_system_poller
>         end
>       end
>     end
>   end
>   class Process
>     def spawn(command)
>       fork do
>         uid_num = Etc.getpwnam(self.uid).uid if self.uid
>         gid_num = Etc.getgrnam(self.gid).gid if self.gid
>
>         ::Process.groups = [gid_num] if self.gid
>         ::Process::Sys.setgid(gid_num) if self.gid
>         ::Process::Sys.setuid(uid_num) if self.uid
>
>         $0 = command
>         STDIN.reopen "/dev/null"
>         STDOUT.reopen file_in_chroot(self.log), "a"
>         STDERR.reopen STDOUT
>
>         # close any other file descriptors
>         3.upto(256){|fd| IO::new(fd).close rescue nil}
>
>         if self.env && self.env.is_a?(Hash)
>           self.env.each do |(key, value)|
>             ENV[key] = value
>           end
>         end
>
>         exec command unless command.empty?
>       end
>     end
>   end
> end
>
>
>
> On Thu, Nov 6, 2008 at 2:01 AM, Tigris <[EMAIL PROTECTED]> wrote:
>
> > On Sep 14, 1:06 pm, None <[EMAIL PROTECTED]> wrote:
> >> I've found and fixed my problem(s).  Turns out the let-god-demonize
> >> thing was a red herring.  The fixes were to use the PortablePoller on
> >> CENTOS, and to modify God::System::Process#spawn not to perform chroot
> >> and chdir.  Voila!
>
> > I don't suppose anyone can explain a bit better on how to achieve
> > this? I'm experiencing the same problems outlined here on CENTOS also.
> > Kill the processes manually after loading god and it doesn't even see
> > the fact they died, nor do I see it polling in the logs, it just sits
> > there apparently doing nothing.
>
> > #######################
> > def make_fail_safe(watcher)
> >  watcher.lifecycle do |on|
> >    on.condition(:flapping) do |c|
> >      c.to_state     = [:start, :restart]
> >      c.times        = 5
> >      c.within       = 5.minutes
> >      c.transition   = :unmonitored
> >      c.retry_in     = 10.minutes
> >      c.retry_times  = 5
> >      c.retry_within = 2.hours
> >    end
> >  end
> > end
>
> > God.watch do |w|
> >  w.name     = 'apache'
> >  w.pid_file = '/var/run/httpd.pid'
> >  w.interval = 60.seconds
>
> >  w.start   = '/etc/init.d/httpd start'
> >  w.stop    = '/etc/init.d/httpd stop'
> >  w.restart = '/etc/init.d/httpd graceful'
>
> >  w.start_grace   = 20.seconds
> >  w.restart_grace = 20.seconds
>
> >  w.behavior(:clean_pid_file)
>
> >  w.restart_if do |r|
> >    r.condition(:cpu_usage)   {|c| c.notify = 'developers'; c.above =
> > 80.percent;    c.times = 5}
> >    r.condition(:cpu_usage)   {|c| c.notify = 'developers'; c.above =
> > 60.percent;    c.times = 2}
> >    r.condition(:memory_usage){|c| c.notify = 'developers'; c.above =
> > 500.megabytes; c.times = 5}
> >    r.condition(:http_response_code) do |c|
> >      c.notify      = 'developers'
> >      c.host        = 'www.example.com'
> >      c.path        = '/god'
> >      c.code_is_not = 200
> >      c.timeout     = 2.seconds
> >    end
> >  end
>
> >  make_fail_safe(w)
> > end
>
> > God.contact(:email) do |c|
> >  c.name  = 'Me'
> >  c.email = '[EMAIL PROTECTED]'
> >  c.group = 'developers'
> > end
> > #######################
>
> > regards,
> > Danial
>
> --
> Colin Steelewww.colinsteele.org
> [EMAIL PROTECTED]
> Ken Kesey - "Ritual is necessary for us to know anything."
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"god.rb" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/god-rb?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to