当前情况:我有一个 Rails 应用程序,其中有 N 个延迟的工作人员。每当我想向某台机器发送 SSH 请求时,我都会为工作人员创建一个任务。Worker 执行如下操作:
Net:SSH.start(hostname, username, :password => pass) do |ssh|
ssh.exec!(command)
end
有时我会创建例如 50 个这样的任务来一个一个地执行,或者在 5-10 分钟内执行。在这种情况下,每个任务都会打开单独的连接,这并不有效,有时会因为连接太多而被目标服务器阻塞。
我想要什么:已打开存储在某处的连接并由每个工作人员重用。这样每个工作人员都以某种方式获得连接,然后运行
ssh.exec!(command)
我尝试过的:
- 在文件/数据库/缓存中存储连接看起来是不可能的,因为它们不可序列化
- 尝试使用单例类和在初始化程序下实例化的全局变量。但是每个worker的类对象是不同的(后来发现不能选择全局变量)。
有办法解决吗?还有其他想法吗?谢谢!!