Daemonization
RExec Daemon framework provides a very simple solution for long running daemon processes. Here is an example XML-RPC daemon:
#!/usr/bin/env ruby
# Copyright (c) 2007, 2009 Samuel Williams. Released under the GNU GPLv3.
require 'rubygems'
require 'pathname'
require 'rexec'
require 'rexec/daemon'
require 'webrick'
require 'webrick/https'
require 'xmlrpc/server'
# Very simple XMLRPC daemon
class TestDaemon < RExec::Daemon::Base
@@var_directory = Pathname.new(__FILE__).dirname + "var"
def self.run
puts "Starting server..."
@@rpc_server = WEBrick::HTTPServer.new(
:Port => 11235,
:BindAddress => "0.0.0.0",
:SSLEnable => true,
:SSLVerifyClient => OpenSSL::SSL::VERIFY_NONE,
:SSLCertName => [["CN", WEBrick::Utils::getservername]])
@@listener = XMLRPC::WEBrickServlet.new
@@listener.add_handler("add") do |amount|
@@count ||= 0
@@count += amount
end
@@listener.add_handler("total") do
@@count
end
@@rpc_server.mount("/RPC2", @@listener)
@@rpc_server.start
puts "Exiting server..."
end
def self.shutdown
@@rpc_server.shutdown
end
end
TestDaemon.daemonize
To start and stop this daemon, if the file was called daemon.rb:
$ ./daemon.rb start Daemon starting... Waiting for daemon to start (5/5) Daemon started: 14969 $ ./daemon.rb status running $ ./daemon.rb stop Sending TERM... $ ./daemon.rb status stopped
This daemon will continue to run in the background, until it is stopped. This is because it detaches from the terminal you start it from, and thus is not closed when you close the terminal.
Follow Me