Dea*_*rry 2 ruby scheduling ruby-on-rails ping ruby-on-rails-3
我目前正在创建一个使用Ruby on Rails创建的仪表板应用程序.
我为Ping添加了一个服务器模型和控制器.
我想要的是ping在给定的服务器IP地址上运行命令.
我该如何处理并将结果(状态和M/S)记录到数据库中?
我也想知道如何每分钟运行命令.
ada*_*oke 13
可能最简单的方法是打开TCP套接字:
require 'timeout'
require 'socket'
def ping(host)
begin
Timeout.timeout(5) do
s = TCPSocket.new(host, 'echo')
s.close
return true
end
rescue Errno::ECONNREFUSED
return true
rescue Timeout::Error, Errno::ENETUNREACH, Errno::EHOSTUNREACH
return false
end
end
ping('109.104.109.237')
Run Code Online (Sandbox Code Playgroud)
这些使用TCP ping而不是ICMP,因此需要根据需要配置防火墙.
每分钟运行一次可以通过以下方式实现:
loop do
# do your ping tests
sleep 60
end
Run Code Online (Sandbox Code Playgroud)
并一直运行该过程.如果你想要一个简单的背景方法,你可以看看像Daemons(http://daemons.rubyforge.org/)这样的东西.