MainLoop is a simple main application implementation to control subprocesses(children) and threads.
Features:
- reaping children
- handling SIGTERM SIGINT to shutdown children(and threads) gracefully
- restarting children
- termination the children
Example usage:
require 'main_loop'
logger = Logger.new(STDOUT)
logger.level = Logger::DEBUG
bus = MainLoop::Bus.new
dispatcher = MainLoop::Dispatcher.new(bus, logger: logger)
mainloop = MainLoop::Loop.new(bus, dispatcher, logger: logger)
MainLoop::ProcessHandler.new dispatcher, 'test1', retry_count: 3, logger: logger do
sleep 2
exit! 0
end
MainLoop::ProcessHandler.new dispatcher, 'test2', retry_count: 2, logger: logger do
trap 'TERM' do
exit(0)
end
sleep 2
exit! 1
end
MainLoop::ThreadHandler.new dispatcher, 'thread2', retry_count: 0, logger: logger do
system('sleep 15;echo ok')
end
mainloop.run
It's a gem:
gem install main_loop
There's also the wonders of the Gemfile:
gem 'main_loop'