我有一个Ruby进程监听给定的设备。我想通过Rails应用程序为不同设备启动/关闭它的实例。我可以找到的Ruby守护进程的所有内容似乎都是基于一组守护进程运行或使用消息队列进行后台处理。动态Ruby守护进程管理
我应该这样做与Kernel.spawn
和存储在数据库中的PID?这看起来有点冒险,但如果没有现成的框架允许我调出/关闭守护进程,看起来我可能没有太多选择。
我有一个Ruby进程监听给定的设备。我想通过Rails应用程序为不同设备启动/关闭它的实例。我可以找到的Ruby守护进程的所有内容似乎都是基于一组守护进程运行或使用消息队列进行后台处理。动态Ruby守护进程管理
我应该这样做与Kernel.spawn
和存储在数据库中的PID?这看起来有点冒险,但如果没有现成的框架允许我调出/关闭守护进程,看起来我可能没有太多选择。
除了生成另一个脚本并将PID保存在数据库中,您可以在同一个脚本中使用fork
并在内存中保留PID来完成所有操作。下面是一个示例脚本 - 您可以通过键入命令控制台“添加”和“删除”添加和删除“工人情况”,用“退出”退出:
@pids = []
@counter = 0
def add_process
@pids.push(Process.fork {
loop do
puts "Hello from worker ##{@counter}"
sleep 1
end
})
@counter += 1
end
def del_process
return false if @pids.empty?
pid = @pids.pop
Process.kill('SIGTERM', pid)
true
end
def kill_all
while del_process
end
end
while cmd = gets.chomp
case cmd.downcase
when 'quit'
kill_all
exit
when 'add'
add_process
when 'del'
del_process
end
end
当然,这仅仅是一个例子,并发送命令和/或监视实例,你可以用一个小的Sinatra应用程序,套接字接口或命名管道等代替这个简单的循环。
这是迄今为止最简单的解决方案。我只是在过度思考问题。因为我已经有一个孤立的班级为我做了一切事情,所以我可以“分开”()来分享我心中的内容。 –
你是什么意思“在设备上侦听”? –
我使用serialport gem来侦听串行端口。 –