18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
# File 'lib/tobox/cli.rb', line 18
def run
options = @options
options.fetch(:require).each(&method(:require))
config = Configuration.new do |c|
c.instance_eval(File.read(options.fetch(:config_file)), options.fetch(:config_file), 1)
end
logger = config.default_logger
pipe_read, pipe_write = IO.pipe
%w[INT TERM].each do |sig|
old_handler = Signal.trap(sig) do
if old_handler.respond_to?(:call)
begin
old_handler.call
rescue Exception => e
puts ["Error in #{sig} handler", e].inspect
end
end
pipe_write.puts(sig)
end
rescue ArgumentError
puts "Signal #{sig} not supported"
end
app = Tobox::Application.new(config)
begin
app.start
logger.info "Running tobox-#{Tobox::VERSION} (#{RUBY_DESCRIPTION})"
logger.info "workers=#{config[:concurrency]}"
logger.info "Press Ctrl-C to stop"
while pipe_read.wait_readable
signal = pipe_read.gets.strip
handle_signal(signal)
end
rescue Interrupt
logger.info "Shutting down..."
app.stop
logger.info "Down!"
exit(0)
end
end
|