Как остановить Бога от оставления устаревших процессов Resque?
Я пытаюсь понять, как контролировать работника resque для travis-ci с богом таким образом, что остановка рескейских часов через бога не уйдет процесс устаревших рабочих.
В следующем я говорю о рабочем процессе, а не для разветвленных дочерних процессов задания (т.е. очередь пуста все время).
Когда я вручную запускаю resque worker следующим образом:
$ QUEUE=builds rake resque:work
Я получу один процесс:
$ ps x | grep resque
7041 s001 S+ 0:05.04 resque-1.13.0: Waiting for builds
И этот процесс исчезнет, как только я остановлю рабочую задачу.
Но когда я начинаю то же самое с богом (точная конфигурация здесь, в основном то же самое, что resque/Бог пример), как это...
$ 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
Когда я останавливаю часы рескей через бога:
$ 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
Ответы
Ответ 1
Вам нужно сказать богу, чтобы использовать файл pid, сгенерированный с помощью rescue, и установить pid файл
w.env = {'PIDFILE' => '/path/to/resque.pid'}
w.pid_file = '/path/to/resque.pid'
env скажет спасение, чтобы написать файл pid, и pid_file скажет богу, чтобы использовать его
также, как отметил svenfuchs, должно быть достаточно, чтобы установить только правильное env:
w.env = { 'PIDFILE' => "/home/travis/.god/pids/#{w.name}.pid" }
где/home/travis/.god/pids - это каталог pids по умолчанию
Ответ 2
Возможно, я немного опоздал на вечеринку, но у нас была такая же проблема на нашей стороне. Мы использовали
rvm [email protected] do bundle exec rake environment resque:work
который вызвал множественные процессы. По словам нашего сисопа, это связано с использованием rvm do, который мы заменили на
/path/to/rvm/gems/ruby-2.1.0/wrappers/bundle exec rake environment resque:work
Это позволило Богу работать как ожидалось без необходимости указывать файл pid.