13

私は、神を介してresqueウォッチを停止しても、古いワーカープロセスが残らないように、resqueワーカーのtravis -ciを神と一緒に監視する方法を理解しようとしています。

以下では、フォークされたジョブの子プロセスではなく、ワーカープロセスについて説明します(つまり、キューは常に空です)。

次のように手動でresqueワーカーを起動すると、次のようになります。

$ QUEUE=builds rake resque:work

私は単一のプロセスを取得します:

$ ps x | grep resque
 7041 s001  S+     0:05.04 resque-1.13.0: Waiting for builds

そして、このプロセスは、ワーカータスクを停止するとすぐになくなります。

しかし、私が神で同じことを始めるとき(正確な構成はここにあります、基本的にresque / godの例と同じものです)このように...

$ RAILS_ENV=development god -c config/resque.god -D
I [2011-03-27 22:49:15]  INFO: Loading config/resque.god
I [2011-03-27 22:49:15]  INFO: Syslog enabled.
I [2011-03-27 22:49:15]  INFO: Using pid file directory: /Volumes/Users/sven/.god/pids
I [2011-03-27 22:49:15]  INFO: Started on drbunix:///tmp/god.17165.sock
I [2011-03-27 22:49:15]  INFO: resque-0 move 'unmonitored' to 'init'
I [2011-03-27 22:49:15]  INFO: resque-0 moved 'unmonitored' to 'init'
I [2011-03-27 22:49:15]  INFO: resque-0 [trigger] process is not running (ProcessRunning)
I [2011-03-27 22:49:15]  INFO: resque-0 move 'init' to 'start'
I [2011-03-27 22:49:15]  INFO: resque-0 start: cd /Volumes/Users/sven/Development/projects/travis && rake resque:work
I [2011-03-27 22:49:15]  INFO: resque-0 moved 'init' to 'start'
I [2011-03-27 22:49:15]  INFO: resque-0 [trigger] process is running (ProcessRunning)
I [2011-03-27 22:49:15]  INFO: resque-0 move 'start' to 'up'
I [2011-03-27 22:49:15]  INFO: resque-0 moved 'start' to 'up'
I [2011-03-27 22:49:15]  INFO: resque-0 [ok] memory within bounds [784kb] (MemoryUsage)
I [2011-03-27 22:49:15]  INFO: resque-0 [ok] process is running (ProcessRunning)
I [2011-03-27 22:49:45]  INFO: resque-0 [ok] memory within bounds [784kb, 784kb] (MemoryUsage)
I [2011-03-27 22:49:45]  INFO: resque-0 [ok] process is running (ProcessRunning)

次に、追加のプロセスを取得します。

$ ps x | grep resque
 7187   ??  Ss     0:00.02 sh -c cd /Volumes/Users/sven/Development/projects/travis && rake resque:work
 7188   ??  S      0:05.11 resque-1.13.0: Waiting for builds
 7183 s001  S+     0:01.18 /Volumes/Users/sven/.rvm/rubies/ruby-1.8.7-p302/bin/ruby /Volumes/Users/sven/.rvm/gems/ruby-1.8.7-p302/bin/god -c config/resque.god -D

神は最初のもののpidを記録するだけのようです:

$ cat ~/.god/pids/resque-0.pid
7187

それから私が神を介してresqueウォッチを停止すると:

$ god stop resque
Sending 'stop' command

The following watches were affected:
  resque-0

神はこのログ出力を与えます:

I [2011-03-27 22:51:22]  INFO: resque-0 stop: default lambda killer
I [2011-03-27 22:51:22]  INFO: resque-0 sent SIGTERM
I [2011-03-27 22:51:23]  INFO: resque-0 process stopped
I [2011-03-27 22:51:23]  INFO: resque-0 move 'up' to 'unmonitored'
I [2011-03-27 22:51:23]  INFO: resque-0 moved 'up' to 'unmonitored'

ただし、実際には両方のプロセスを終了せず、実際のワーカープロセスを存続させます。

$ ps x | grep resque
 6864   ??  S      0:05.15 resque-1.13.0: Waiting for builds
 6858 s001  S+     0:01.36 /Volumes/Users/sven/.rvm/rubies/ruby-1.8.7-p302/bin/ruby /Volumes/Users/sven/.rvm/gems/ruby-1.8.7-p302/bin/god -c config/resque.god -D
4

2 に答える 2

17

レスキューによって生成されたpidファイルを使用してpidファイルを設定するように神に指示する必要があります

w.env = {'PIDFILE' => '/path/to/resque.pid'}
w.pid_file = '/path/to/resque.pid'

envはrescueにpidファイルを書き込むように指示し、pid_fileはgodにそれを使用するように指示します

また、svenfuchsが指摘したように、適切なenvのみを設定するだけで十分なはずです。

w.env = { 'PIDFILE' => "/home/travis/.god/pids/#{w.name}.pid" }

ここで、/ home / travis / .god/pidsはデフォルトのpidsディレクトリです

于 2011-03-28T09:32:08.503 に答える
0

私はここでのパーティーに少し遅れるかもしれませんが、私たちの側でも同じ問題がありました。使っていた

rvm 2.1.0@ do bundle exec rake environment resque:work

これが複数のプロセスを引き起こしました。私たちのシスオペの人によると、これは私たちが置き換えたrvmdoの使用によるものです

/path/to/rvm/gems/ruby-2.1.0/wrappers/bundle exec rake environment resque:work

これにより、神はpidファイルを指定しなくても期待どおりに機能することができました。

于 2014-03-12T05:30:15.107 に答える