Asmodai
Description
Asmodai is a simple-to-use generator for daemon tasks written in Ruby. It makes creating a daemon as straight forward as creating a Rails-application and saves you the hassle of boring and repetitive tasks like creating start- and stop-scripts, pid-file logic or implementing logging.
Installation
$ gem install asmodai
Usage
$ asmodai new foobar
$ cd foobar
Here you will find a dummy implementation:
class Foobar < Asmodai::Daemon
attr_accessor :running
def on_signal(sig)
# perform cleanup or stop an eventloop
self.running=false
end
def run
self.running=true
while running
logger.info { "I'm still running" }
sleep 1
end
end
end
You can develop your daemon by executing
$ asmodai foreground
This executes the daemon in the foreground and outputs all logging to standard output. It can be terminated with Ctrl-C.
To start your daemon in the background run
$ asmodai start
This will redirect all the output from the process to log/foobar.log
In order to check the status of the daemon run
$ asmodai status
foobar runs with pid 75952
Stop the daemon
$ asmodai stop
Example: Using Asmodai with EventMachine
$ asmodai new echo
$ cd echo
Edit the Gemfile
source 'http://rubygems.org'
gem 'activesupport', ">= 3.0.3"
gem 'eventmachine'
Edit lib/server.rb
module Echo::Server
def post_init
puts "-- someone connected to the echo server!"
end
def receive_data data
send_data ">>>you sent: #{data}"
close_connection if data =~ /quit/i
end
def unbind
puts "-- someone disconnected from the echo server!"
end
end
Edit echo.rb
class Echo < Asmodai::Daemon
require 'server' # lib is automatically added to the $LOAD_PATH
def on_signal(sig)
EventMachine::stop_event_loop
end
def run
EventMachine::run do
EventMachine::start_server "127.0.0.1", 8081, Echo::Server
end
end
end
Now, run
$ bundle install
$ asmodai start
And you have your own running Echo server. Wheee!