Как получить статус демонов программно с помощью Ruby gem "daemons"

У меня есть скрипт (myscript.rb), как показано ниже:

require 'daemons'

Daemons.run_proc 'myproc', dir_mode: :normal, dir: '/path/to/pids' do
  # Daemon code here...
end

Итак, я могу проверить состояние демона в консоли ruby myscript.rb status,

Но мне нужно показать статус демона на веб-странице (Rails), например:

<p>Daemon status: <%= "Daemon status here..." </p>

Как это может быть сделано?

2 ответа

Решение

В моих тестах кажется, что команда "status" выходит с ненулевым значением, когда демон не работает:

$ ruby myscript.rb status; echo $?
myproc: no instances running
3
$ ruby myscript.rb start
myproc: process with pid 21052 started.
$ ruby myscript.rb status; echo $?
myproc: running [pid 21052]
0
$ ruby myscript.rb stop
myproc: trying to stop process with pid 21052...
myproc: process with pid 21052 successfully stopped.
$ ruby myscript.rb status; echo $?
myproc: no instances running
3

Таким образом, можно программно проверить состояние демона, как показано ниже:

require 'open3'

stdin, stdout, stderr, wait_thr = Open3.popen3('ruby', 'myscript.rb', 'status')
if wait_thr.value.to_i == 0
  puts "Running"
else
  puts "Not running"
end

По умолчанию способ сделать это будет позвонить ruby myscript.rb status из вашего приложения Rails и проанализируйте его вывод, чтобы получить желаемую информацию. В качестве альтернативы вы также можете создать Application возразить сам и вызвать #running? в теме.

Другие вопросы по тегам