红宝石 – 如何阻止上帝离开陈旧的工作流程?

前端之家收集整理的这篇文章主要介绍了红宝石 – 如何阻止上帝离开陈旧的工作流程?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在努力了解如何用上帝监测 travis-ci的雷克斯工人,这样一来,通过上帝阻止雷克斯手表就不会离开一个陈旧的工作进程.

在下文中,我在谈论工作进程,而不是分派作业子进程(即队列始终是空的).

当我手动启动reque工作如下:

$QUEUE=builds rake resque:work

我会得到一个单一的过程:

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

一旦我停止工作任务,这个过程就会消失.

但是当我开始与上帝同样的事情(exact configuration is here,基本上和resque/god example相同的事情)像这样…

$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

当我通过神停止reque手表:

$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

解决方法

你需要告诉上帝使用pid生成的pid文件并设置pid文件
w.env = {'PIDFILE' => '/path/to/resque.pid'}
w.pid_file = '/path/to/resque.pid'

env会告诉拯救写pid文件,pid_file会告诉上帝使用它

svenfuchs指出,应该足够设置适当的环境:

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

其中/home/travis/.god/pids是默认的pids目录

猜你在找的Ruby相关文章