停止Ruby服务的正确方法
我正在使用AirBnb神经服务。其服务代码如下所示:停止Ruby服务的正确方法,ruby,service,Ruby,Service,我正在使用AirBnb神经服务。其服务代码如下所示: require 'logger' require 'json' require 'timeout' require 'nerve/version' require 'nerve/utils' require 'nerve/log' require 'nerve/ring_buffer' require 'nerve/reporter' require 'nerve/service_watcher' module Nerve clas
require 'logger'
require 'json'
require 'timeout'
require 'nerve/version'
require 'nerve/utils'
require 'nerve/log'
require 'nerve/ring_buffer'
require 'nerve/reporter'
require 'nerve/service_watcher'
module Nerve
class Nerve
include Logging
def initialize(opts={})
log.info 'nerve: starting up!'
# set global variable for exit signal
$EXIT = false
...some code...
# Any exceptions in the watcher threads should wake the main thread so
# that we can fail fast.
Thread.abort_on_exception = true
log.debug 'nerve: completed init'
end
def run
log.info 'nerve: starting run'
@services.each do |name, config|
launch_watcher(name, config)
end
begin
sleep
rescue StandardError => e
log.error "nerve: encountered unexpected exception #{e.inspect} in main thread"
raise e
ensure
$EXIT = true
log.warn 'nerve: reaping all watchers'
@watchers.each do |name, watcher_thread|
reap_watcher(name)
end
end
log.info 'nerve: exiting'
ensure
$EXIT = true
end
def launch_watcher(name, config)
... some code ...
end
def reap_watcher(name)
... some code ...
end
end
end
我没有看到任何停止方法。停止这种服务的正确方法是什么?我正在使用JRuby,并打算为此服务编写一个JSVC适配器。除了向它发送一个信号之外,通过当前的API无法做到这一点 如果发送信号不起作用,并且您希望显式处理stop,则您需要更改以下内容: 向设置$EXIT=true的Nerve添加一个stop方法。 修改run,使其唤醒并检查$EXIT,而不是永远睡眠。
谢谢信号工作。我为这个服务编写了一个JSVC适配器。JSVC正在通过发送信号关闭此服务。但是,不确定这是否干净。