В итоге я использовал рубиновый гем Daemons для демонизации моих скриптов и использовал Bluepill для их мониторинга. Я знаю, что вы можете сделать оба, используя только Bluepill, но я не мог понять это в то время, и моя система работала просто отлично. Я использую Rails 3.0.3, Daemons 1.1.5 и Bluepill 0.0.51. Итак, обо всем по порядку, убедитесь, что у вас установлены Daemons и Bluepill.
Допустим, у нас есть myserver.rb, скрипт сервера ruby, который находится в корне моего приложения rails. Чтобы демонизировать его с помощью демонов, создайте myserver_control.rb в корневой папке, чтобы сообщить демонам, как демонизировать:
# myserver_control.rb
require 'rubygems'
require 'daemons'
@options = {
:dir_mode => :normal,
:dir => '/Library/WebServer/myrailsapp/pids',
:multiple => true,
:backtrace => true,
:monitor => false,
:log_dir => '/Library/WebServer/myrailsapp/log',
:log_output => true
}
Daemons.run('myserver.rb', @options)
Ознакомьтесь с документацией Daemon, чтобы узнать больше о хэше опций. Теперь вы можете запустить своего демона из корневой папки приложения rails в командной строке, используя команду sudo ruby myserver_control.rb start. Это команда запуска демона, которую вы можете поместить в файл конфигурации Bluepill (файл myrailsapp.pill) следующим образом:
Bluepill.application("myrailsapp", :foreground => false, :log_file => "/Library/WebServer/myrailsapp/log/bluepill.log") do |app|
app.process("myserver") do |process|
process.start_command = "sudo ruby myserver_control.rb start"
process.stop_command = "sudo ruby myserver_control.rb stop"
process.restart_command = "sudo ruby myserver_control.rb restart"
process.pid_file = "/Library/WebServer/myrailsapp/pids/myserver.rb0.pid"
process.working_dir = "/Library/WebServer/myrailsapp"
process.start_grace_time = 5.seconds
process.stop_grace_time = 5.seconds
process.restart_grace_time = 8.seconds
end
end
Обязательно прочитайте документацию по Bluepill, чтобы увидеть все ваши многочисленные варианты. Затем, когда вы запускаете Bluepill, у вас есть контролируемый демон. Убедитесь, что все папки, указанные в приведенных выше примерах, существуют (например, pids).