Как получить статус демонов программно с помощью 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?
в теме.