Я бы хотел использовать популярный камень Тора для создания демонизированной задачи.Мой класс Тора выглядит следующим образом:
require 'rubygems'
require 'daemons'
require 'thor'
class CLI < Thor
desc "start", "Startup the App"
method_option :daemonize, :aliases => "-d", :default => false, :type => :boolean, :banner => "Run as daemon"
def start
run_app(options[:daemonize])
end
desc "stop", "Stop the daemon"
def stop
stop_app
end
no_tasks {
def run_app(run_as_daemon)
# Run the application code
Daemons.daemonize if run_as_daemon
# loop until stopped or interrupted
# ...
end
def stop_app
#stop the app
end
}
end
Итак, здесь я настроил базовый класс Тор с двумя задачами: запуск и остановка.Я также в настоящее время использую драгоценный камень Демонов, но это не обязательно.Часть, с которой я борюсь, заключается в том, что, когда это приложение запускается как run_thor_app.rb start, все работает нормально.Очевидно, что в этом случае задача остановки не нужна.Но когда я запускаю «run_thor_app.rb start -d», приложение запускается до тех пор, пока не запускается Daemons.daemonize, а затем закрывается.Проверка запущенных процессов показывает, что ничего не работает в фоновом режиме.
Даже если бы что-то работало, я бы не знал, как подойти к задаче остановки.Например, как вы обнаруживаете, что приложение работает как демон, и останавливаете его.Я посмотрел на Daemons :: Monitor, но в документации неясно, как это работает, и когда я попробовал, это не сработало.случай чего-то, что встроено в Thor, но поиск по коду на github мне ничего не показал.Может быть, я просто где-то пропустил.В любом случае, я думаю, что было бы хорошо документировать лучшие практики или шаблоны для работы с демонами с помощью Thor, чтобы другие могли на них ссылаться.