我正在努力了解如何用上帝监测
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