如何使用 Ruby gem "daemons" 以编程方式获取守护进程的状态
How get daemons' status programmatically using 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>
如何做到这一点?
执行此操作的默认方法实际上是从您的 Rails 应用程序调用 ruby myscript.rb status
并解析其输出以获得所需信息。
或者,您也可以创建一个 Application
对象本身并对其调用 #running?
。
在我的测试中,当守护程序不是 运行:
时,"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
我有一个脚本 (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>
如何做到这一点?
执行此操作的默认方法实际上是从您的 Rails 应用程序调用 ruby myscript.rb status
并解析其输出以获得所需信息。
或者,您也可以创建一个 Application
对象本身并对其调用 #running?
。
在我的测试中,当守护程序不是 运行:
时,"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