rubygod

God (the ruby process manager) is constantly restarting my process


This is probably a fairly newbie fix so apologies in advance.

I have a simple process that I want to control with god. The process at this stage is basically just loop do; sleep 1; end. The config file is bare minimum:

God.watch do |w|
  w.name = "punter"
  w.start = "bundle exec rails runner ./script/fetcher_daemon.rb"
  w.keepalive
end

The process keeps starting over and over and the pid file keeps getting reset. It's like God can start everything ok then doesn't recognise that the process is running and restarts it. See log file below:

I can run bundle exec rails runner ./script/fetcher_daemon.rb from the command line and it runs fine.

My setup is Mint Linux and I use rvm.

I [2012-08-23 19:33:42]  INFO: Loading ./script/punter.god
I [2012-08-23 19:33:42]  INFO: Syslog enabled.
I [2012-08-23 19:33:42]  INFO: Using pid file directory: /home/matt/.god/pids
I [2012-08-23 19:33:42]  INFO: Started on drbunix:///tmp/god.17165.sock
I [2012-08-23 19:33:42]  INFO: punter move 'unmonitored' to 'up'
D [2012-08-23 19:33:42] DEBUG: driver schedule #<God::Conditions::ProcessRunning:0x917d7d0> in 0 seconds
I [2012-08-23 19:33:42]  INFO: punter moved 'unmonitored' to 'up'
I [2012-08-23 19:33:42]  INFO: punter [trigger] process is not running (ProcessRunning)
D [2012-08-23 19:33:42] DEBUG: punter ProcessRunning [true] {true=>:start}
I [2012-08-23 19:33:42]  INFO: punter move 'up' to 'start'
I [2012-08-23 19:33:42]  INFO: punter start: bundle exec rails runner ./script/fetcher_daemon.rb
D [2012-08-23 19:33:42] DEBUG: driver schedule #<God::Conditions::ProcessRunning:0x917d7d0> in 0 seconds
I [2012-08-23 19:33:42]  INFO: punter moved 'up' to 'up'
I [2012-08-23 19:33:42]  INFO: punter [ok] process is running (ProcessRunning)
D [2012-08-23 19:33:42] DEBUG: punter ProcessRunning [false] {true=>:start}
D [2012-08-23 19:33:42] DEBUG: driver schedule #<God::Conditions::ProcessRunning:0x917d7d0> in 5 seconds
I [2012-08-23 19:33:47]  INFO: punter [trigger] process is not running (ProcessRunning)
D [2012-08-23 19:33:47] DEBUG: punter ProcessRunning [true] {true=>:start}
I [2012-08-23 19:33:47]  INFO: punter move 'up' to 'start'
I [2012-08-23 19:33:47]  INFO: punter start: bundle exec rails runner ./script/fetcher_daemon.rb
D [2012-08-23 19:33:48] DEBUG: driver schedule #<God::Conditions::ProcessRunning:0x917d7d0> in 0 seconds
I [2012-08-23 19:33:48]  INFO: punter moved 'up' to 'up'
I [2012-08-23 19:33:48]  INFO: punter [ok] process is running (ProcessRunning)
D [2012-08-23 19:33:48] DEBUG: punter ProcessRunning [false] {true=>:start}
D [2012-08-23 19:33:48] DEBUG: driver schedule #<God::Conditions::ProcessRunning:0x917d7d0> in 5 seconds

Solution

  • You need to use an absolute path in your god file. So here it's

    God.watch do |w|
      w.name = "punter"
      w.start = "bundle exec rails runner /home/matt/code/punter/script/fetcher_daemon.rb" # <- abs path
      w.keepalive
    end