This gem allows you to easily create daemons (also known as servers, services, or background processes) in a project generated with Totem. Both MRI and Jruby are supported.
This is a fork of the Raad gem that is modified for Totem projects. All credit goes to the original project as they did all the hard work.
- Removal of log4j since Totem already has a built in logger.
- Integration with Totem.
- Change namespaces so as not to conflict with Raad if both gems are installed.
- Removal of various command line options and use Totem defaults instead.
Add this line to your Totem project's Gemfile:
gem 'raad_totem', :require => 'raad_totem/shell_cmds/service'
And then execute:
$ bundle
Create a new service file service/hello_world_service.rb
in the project root directory:
#!/usr/bin/env ruby
require_relative '../config/environment.rb'
require 'raad_totem'
class HelloWorldService
def self.options_parser(parser, options)
parser.separator('')
parser.separator('App Options:')
parser.on('-c', '--custom', 'Some custom option') {|val| options[:custom] = val }
return parser
end
def start
Totem.logger.info('Service start.')
while !RaadTotem.stopped?
Totem.logger.info('Hello World.')
sleep 5
end
end
def stop
Totem.logger.info('Service stop.')
end
end
Make sure you set executable permissions on your service file:
chmod +x service/hello_world_service.rb
You can run your service in the foreground (press ctrl+c to kill it and wait a few seconds):
./service/hello_world_service.rb start
You can also run your service in the background:
./service/hello_world_service.rb -d start
To stop the background service:
./service/hello_world_service.rb stop
By default, your service will log to a custom log in the log
directory.
It will also create a PID file in the tmp/pid
directory.
To view all available options (including custom ones you define):
./service/hello_world_service.rb --help
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request