У меня есть проект, в котором у меня есть приложение sinatra, и я хочу запустить его с помощью тонкого файла через скрипт ruby администратора.Я хочу иметь возможность запускать, останавливать и перезапускать его, а также иметь возможность демонизировать его, если будет предложено.Это, я хочу иметь что-то вроде этого в моем сценарии:
bin / myscript
require 'MyCLI'
MyCLI.new(ARGV).run
lib / mycli.rb
class MyCLI
# instantiate and other methods (inspired by thin runner)
...
def run
# parse commands and options
...
# then process command
case @command
when 'start'
@server = Thin::Server.new(host, port, MyModule::MyAppClass)
@server.start
when 'stop'
# ?
when 'restart'
# ?
else
raise "Unknown command"
end
end
end
Но яборясь с некоторыми проблемами,
Мне нужно его демонизировать или нет, в зависимости от некоторого параметра команды, и я не могу найти, можно ли передать какой-либо параметр в #new
после чтения документов икопаться в некотором коде.
Остановка будет такой же простой, как и @server.stop
, но так как мой скрипт создает экземпляр объекта mycli при каждом запросе командной строки, у меня нет ни одного объектапоэтому @server исчезает после запроса на запуск, так что я думаю, что единственным решением было бы управление PID (правильно ??), но я не могу найти, насколько тонким это удается.Также, я предполагаю, что запуск его на переднем плане не будет работать с этим подходом pid.
Каков будет правильный способ перезапустить его?
У кого-нибудь есть лучшее решение для этого?