class Evesync::Service
Class for creating daemons which are DRb servers with proxy object to accept requests.
Traps signals to exit.
Example:
d = Evesync::Service.new(:mydaemond) do |config| config.proxy = SomeProxyObject.new end d.start
Public Class Methods
new(name) { |factory| ... }
click to toggle source
# File lib/evesync/service.rb, line 20 def initialize(name) @factory = ServiceFactory.new @factory.name = name unless name.nil? yield @factory end
Public Instance Methods
daemonize()
click to toggle source
# File lib/evesync/service.rb, line 68 def daemonize Process.daemon Process.setproctitle(@factory.name.to_s) \ if Process.respond_to? :setproctitle $0 = @factory.name.to_s FileUtils.mkdir_p @factory.pids File.open("#{@factory.pids}/#{@factory.name}.pid", 'w') do |f| f.puts(Process.pid) end end
start() { || ... }
click to toggle source
# File lib/evesync/service.rb, line 26 def start daemonize Log.info("#{@factory.name} daemon starting...") @ipc_server = IPC::Server.new( port: @factory.port, proxy: @factory.proxy, ip: @factory.ip, ).start Signal.trap('TERM') do @ipc_server.stop exit 0 end Log.info("#{@factory.name} daemon started!") @factory.at_start.call if @factory.at_start.respond_to? :call loop do sleep @factory.interval yield if block_given? end rescue SignalException => e Log.warn("#{@factory.name} daemon received signal: " \ "#{e.signm}(#{e.signo})") exit 0 # rubocop:disable Lint/RescueException rescue Exception => crit Log.fatal(crit) crit.backtrace.each { |line| Log.fatal(line) } exit 1 # rubocop:enable Lint/RescueException ensure @factory.at_exit.call if @factory.at_exit.respond_to? :call @ipc_server.stop end