I have answered most of the question myself over
here<http://stackoverflow.com/questions/18485845/trying-to-understand-god-rb/18494563#18494563>
but
there are still some question that are unclear please feel free to add your
comment as well for future
Regards
On Wednesday, 28 August 2013 15:25:57 UTC+5:30, Virendra Negi wrote:
>
> First of all I must admit that been a Ruby developer for some time now I
> still find *GOD *hard to configure and hard to understand not sure of
> exact reason of this (Lack of documentation or lack of understanding from
> my part )but still fact is even today I'm facing this, perhaps this post
> might help me find those answer as well
>
> Here are my Problems
>
> *Problem no 1 ( PID dilemma ) : *
> Firstly here how my GOD configuration* simple.god* look like
>
> DIRECTORY = "/Users/joshianiket22/myProject/god_script"God.pid_file_directory
> = DIRECTORYGod.watch do |w|
> w.name = "mess"
> w.start = "ruby /Users/joshianiket22/myProject/god_script/simple.rb"
> w.pid_file = File.join(DIRECTORY,'simple.pid')
> puts File.join(DIRECTORY,'simple.pid')
> w.stop = "ruby -e 'puts \"#{DateTime.now}\"'"
> w.log = File.join(DIRECTORY,'god.log')
> w.behavior(:clean_pid_file)
> w.interval = 10.seconds
> w.start_if do |start|
> start.condition(:process_running) do |c|
> puts "Inside start condition"
> c.interval = 5.seconds
> c.running = false
> end
> endend
>
>
> Now God Documentation states
>
>
> <https://lh5.googleusercontent.com/-nhoBajKdV3I/Uh2vK-m8uaI/AAAAAAAAA_g/VH0bMJ855_c/s1600/download+%282%29.png>
>
>
> Now if you see my *GOD *configuration file I have specified the *
> pid_file_directory*
>
> DIRECTORY = "/Users/joshianiket22/myProject/god_script"God.pid_file_directory
> = DIRECTORY
>
> yet no *PID *(neither of GOD Server nor for the process monitored by GOD
> is stored in that directory) is ever stored in that directory
>
> In fact I have also mention this in my* GOD* configuration
>
> w.pid_file = File.join(DIRECTORY,'simple.pid')
>
> but still the same result no *PID *(not even for the *simple.rb* )
>
> BTW, I have started *GOD *
> *
> *
>
> sudo god -c simple.god
>
> one reason could be that *PID *directory is not writable by GOD ,but to
> tackle that I did *chmod* , *chown* in fact start God using* sudo *
> still no luck
>
>
> Can anyone explain that now
>
> FYI , the Log file work btw
>
> *Problem 2 (Confusion over start_if conditions) *
>
> According to GOD documentation
>
> <https://lh6.googleusercontent.com/-qFE_V7nOzlg/Uh2ypLb8H5I/AAAAAAAAA_s/y0iNl-onPio/s1600/start_if.png>
> Now I get (not exactly) it something like a condition called start only
> if specified condition is met but I don't understand is what
> is*:process_running
> *
> is this predefined condition that implies that check for whether a
> processing is running or not If yes what other set of conditions are
> available
>
> Also what very hard to understand is when would the do block part will be
> executed when *start.condition(:process_running) *return* false or
> true*because I trying to understand the initialization under
> *do* block
>
> I understand the first part it set the* interval to 5 seconds* to look to
> start as oppose to global interval but what does the c.*running = false *
>
> Now where does this attributes is used and also what are *other list of
> attributes* that we can look for extend the block
>
> Anyway I think the attributes is used to perform a check something like
> this
>
> loop(!running)
>
> ## run start condition until the running is set to true which would happen
> as soon process start running
> sleep interval ## 5 seconds intervalend
>
>
> Please feel free to correct me if I'm wrong on this and also please answer
> what are* other list of attributes* *and condition(like :process_running)
> *that we/I can use to extend the block check for *start_if*
>
> FYI, If I remove the start_if my *simple.rb *does not get start at all
> which is weird to me (is this *normal* as well)
>
>
> *Problem 3 : Command dilemma (start/stop/restart)*
>
> Given that you looked at my above configuration script if have a *start
> command written *something like this
>
>
> w.start = "ruby /Users/joshianiket22/myProject/god_script/simple.rb"
>
> Now I understand the *start* bit , but is it required to *write/define* the
> stop , restart command as well on our configuration file
>
> I assuming Its not ,but you can defined your own *stop, restart* command,
> but if you don't define yours own GOD would take care by defining it own
> stop and restart command (which mean stop the process started by start
> command and other stuff , would be taken care off the hook by GOD are my
> assumptions right.)
>
> Anyways based on my above assumption , when I run this on my command line
>
> sudo god stop mess
>
> I get this
>
> Sending 'stop' command
> The following watches were affected:
> mess
>
> but I don't see my *simple.rb *processing getting stopped .
>
> This one of the biggest issue I have seen thus far ,because I have seen
> many GOD configuration file which have* start *command written in them
> but not *stop* and *restart* command
>
> Also , I have another GOD configuration for
> resque<https://github.com/resque/resque> which
> look like this (*Note* I not using the resque provided GOD configuration
> under example directory)
>
> APPLICATION_ROOT = '/var/apps/integration/adminapp'RAILS_ENV =
> 'integration'God.watch do |w|
> w.env = {
> 'PATH' =>
> "/home/deployer/.rbenv/bin:/home/deployer/.rbenv/shims:#{ENV['PATH']}",
> 'USER' => 'deployer',
> 'HOME' => '/home/deployer',
> 'QUEUE'=> '*',
> 'TERM_CHILD' => '1',
> 'RAILS_ENV' => RAILS_ENV || "production",
> 'PIDFILE' => "#{APPLICATION_ROOT}/shared/pids/resque.pid"
> }
>
> w.uid = 'deployer'
> w.gid = 'deployer'
> w.name = "resque"
> w.interval = 30.seconds
> w.start = "/bin/bash -c 'cd #{APPLICATION_ROOT}/current && .
> /home/deployer/.secrets && /usr/bin/env bundle exec \"RAILS_ENV=#{RAILS_ENV}
> QUEUE=* rake environment resque:work\" '"
> w.log = "#{APPLICATION_ROOT}/shared/log/god_resque.log"
> w.start_grace = 30.seconds
> w.pid_file = "#{APPLICATION_ROOT}/shared/pids/god_minerva.pid"
>
> w.behavior(:clean_pid_file)
>
> w.restart_if do |restart|
> restart.condition(:cpu_usage) do |c|
> c.above = 50.percent
> c.times = 5
> end
> end
>
> # determine the state on startup
> w.transition(:init, { true => :up, false => :start }) do |on|
> on.condition(:process_running) do |c|
> c.running = true
> end
> end
>
> # determine when process has finished starting
> w.transition([:start, :restart], :up) do |on|
> on.condition(:process_running) do |c|
> c.running = true
> c.interval = 5.seconds
> end
>
> # failsafe
> on.condition(:tries) do |c|
> c.times = 5
> c.transition = :start
> c.interval = 5.seconds
> end
> end
>
> # start if process is not running
> w.transition(:up, :start) do |on|
> on.condition(:process_running) do |c|
> c.running = false
> end
> endend
>
>
> FYI , again over here the PID is not stored but, that altogether a
> different question that I have address earlier and GOD is started using *
> sudo* command
>
> now you can see that I have *start * command that look like this
>
> w.start = "/bin/bash -c 'cd #{APPLICATION_ROOT}/current && .
> /home/deployer/.secrets && /usr/bin/env bundle exec \"RAILS_ENV=#{RAILS_ENV}
> QUEUE=* rake environment resque:work\" '"
>
> I don't have *stop* , or *restart* command
> *
> *
> Now in my deploy (VLAD <https://github.com/seattlerb/vlad>) script I have
> a piece of code that look like this (where I send the restart task to God
> for resque) or basically when I do this
>
> sudo god restart resque
>
> sudo god stop resque
>
> It doesn't do anything and I still see the resque worker running with same
> * PID *
> *
> *
> Can Anyone explain whether or not it is required to define command (like
> stop/restart ) inside GOD configuration file ?
> *
> *
> *Problem 4 (Whether or whether not to put process in background )*
>
>
> I'll be more specify is this , ideally if I have to put resque worker in
> background (without GOD) I would run command the following command
>
> RAILS_ENV=integration QUEUE=* BACKGROUND=yes PID_FILE=resque.pid bundle exec
> rake resque:work
>
> * BACKROUND=yes *is the key over here
>
> Now I know and according to GOD documentation which states
>
>
> <https://lh3.googleusercontent.com/-TDlSehfpU-0/Uh3B6-L6-LI/AAAAAAAAA_8/L5QyePNwIis/s1600/download+%283%29.png>
>
>
> So the question over here whether should I *DAEMONize* my process
> irrespective it run under GOD (which effectively *DAEMONize* at some
> point) or I should *not DAEMONize* it
> and let GOD do it .
>
> And Let assume If I *DAEMONize *my process will GOD still keep track of
> the process (like GOD act on restart or stop command for resque which is
> DAEMONize by me)
>
> to be more precise if I change my *start* command to look like this
>
> w.start = "/bin/bash -c 'cd #{APPLICATION_ROOT}/current && .
> /home/deployer/.secrets && /usr/bin/env bundle exec \"RAILS_ENV=#{RAILS_ENV}
> BACKGROUND=yes QUEUE=* rake environment resque:work\" '"
>
> will GOD still keep track of the above resque process and will it
> respond to *stop/restart/start* command after doing so
>
> like
>
> sudo god restart resque
>
> sudo god stop resque
>
> sudo god start resque
>
> Help me out guys in better understanding the GOD monitoring in whole
>
>
> Hope I made the everything easy for you guys to understand
>
>
> Thanks
>
--
You received this message because you are subscribed to the Google Groups
"god.rb" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/god-rb.
For more options, visit https://groups.google.com/groups/opt_out.