Как запустить и остановить демон оболочки из Ruby - PullRequest
8 голосов
/ 07 февраля 2011

Как мне запустить демон оболочки, а затем остановить его из того же скрипта Ruby?

Если быть более точным, я бы хотел, чтобы мой скрипт Ruby:

  • Запустите демон сервера с помощью команды оболочки (rails server | shotgun | и т. д.).
  • выполните несколько действий во время работы сервера.
  • заставит сервер завершить работу.

Все охватывающие решения, которые поддерживаются в ruby ​​1.8 / 1.9 и unix / windows, являются предпочтительными.(Я прочитал fork, например, не работает на Windows).

Ответы [ 4 ]

3 голосов
/ 07 февраля 2011

Я очень рекомендую Ruby Daemons gem . Я думаю, что он обладает всеми необходимыми вам функциями.

Проверьте раздел 3 его README и обратите особое внимание на метод Daemons.call , который позволяет демонизировать произвольный код (в котором вы можете просто Kernel.system приложение).

0 голосов
/ 13 июня 2012

Взгляните на самоцвет Raad (Ruby as Daemon) https://github.com/colinsurprenant/raad - он будет прозрачно работать с MRI Ruby и JRuby. (Я автор).

0 голосов
/ 16 марта 2011

Я не мог понять, как сделать то, что мне нужно, с драгоценным камнем Ruby Daemons, который предложил Питер, и вместо этого использовал systemu вместо:

# command to start daemon
command = "thin start" # here starting thin server as example
status, stdout, stderr = systemu command do |cid|
  # do stuff here
  # ...

  Process.kill 9, cid # kill the daemon
end
0 голосов
/ 07 февраля 2011

Вот аналогичная проблема с рабочим решением, использующим командную строку Windows:

https://serverfault.com/questions/35305/cmd-exe-how-to-starts-a-background-process-run-some-things-stops-background-pr

Это довольно грязно, но это помогает.

Используйте Linux, если можете, или просто используйте bash с базовыми инструментами командной строки (устанавливается с Git для Windows). С bash решение очень простое:

./script/rails server --pid server.pid &
ruby do_your_stuff.rb
kill `cat server.pid`

P.S. В любом случае Windows не рекомендуется для Rails. Скорее всего, вы в долгосрочной перспективе сэкономите много времени, переключившись на Linux, потому что вы не будете решать странные экологические проблемы, подобные этой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...