Пингует сервер с Rails и показывает статус - PullRequest
2 голосов
/ 03 апреля 2012

В настоящее время я создаю приложение Dashboard, которое создается с помощью Ruby on Rails.

Я добавил модель и контроллер сервера и то же самое для Ping.

Я хочу запуститькоманда ping на IP-адресе данного сервера.

Как мне поступить и записать результаты (состояние и M / S) в базу данных?

Я также хотел бызнать, как выполнять команду каждую минуту.

1 Ответ

12 голосов
/ 03 апреля 2012

Вероятно, самым простым способом было бы открыть сокет 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')

При этом используется пинг TCP, а не ICMP, поэтому необходимо настроить брандмауэр соответствующим образом.

Запуск этогокаждую минуту можно достичь, используя что-то вроде:

loop do
  # do your ping tests
  sleep 60
end

и постоянно запуская этот процесс.Вы можете посмотреть на что-то вроде Daemons (http://daemons.rubyforge.org/), если вы хотите простой способ создать фон).

...