使用Rails ping服务器并显示状态

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/)这样的东西.