Создание службы ping uptime с помощью PHP


У меня есть сервер, на котором я могу использовать PHP, и маршрутизатор, который можно пинговать из Интернета. Я хочу написать PHP-скрипт, который каждые 5 минут отправляет пинг на маршрутизатор со следующими результатами:

  • Если пинг пройдет успешно, то ничего не произойдет.
  • Если пинг не удается, то он ждет несколько минут, и если он все еще не удается, он отправляет предупреждение на мой адрес электронной почты один раз.
  • После того, как маршрутизатор снова станет доступен для пинга, он отправит электронное письмо о том, что он Хорошо.

Можно ли это сделать с помощью PHP? Как? У кого-нибудь есть небольшой PHP-файл, который делает это?

Author: LanceBaynes, 2011-09-10

3 answers

Ниже я написал простой PHP-скрипт, который делает то, что вы просите. Он проверяет сервер, записывает результат в текстовый файл ("вверх" или "вниз") и отправляет электронное письмо в зависимости от того, был ли предыдущий результат выше или ниже.

Чтобы заставить его запускаться каждые пять минут, вам нужно настроить задание cron для вызова PHP-скрипта каждые пять минут. (Многие общие веб-хостинги позволяют вам настраивать задания cron; обратитесь к документации вашего хостинг-провайдера, чтобы узнать, как это сделать.)

<?php 

//Config information
$email = "[email protected]";
$server = "google.com"; //the address to test, without the "http://"
$port = "80";


//Create a text file to store the result of the ping for comparison
$db = "pingdata.txt";

if (file_exists($db)):
    $previous_status = file_get_contents($db, true);
else:
    file_put_contents($db, "up");
    $previous_status = "up";
endif;

//Ping the server and check if it's up
$current_status =  ping($server, $port, 10);

//If it's down, log it and/or email the owner
if ($current_status == "down"):

    echo "Server is down! ";
    file_put_contents($db, "down");

    if ($previous_status == "down"):
        mail($email, "Server is down", "Your server is down.");
        echo "Email sent.";     
    endif;  

else:

    echo "Server is up! ";
    file_put_contents($db, "up");

    if ($previous_status == "down"):
        mail($email, "Server is up", "Your server is back up.");
        echo "Email sent.";
    endif;

endif;


function ping($host, $port, $timeout)
{ 
  $tB = microtime(true); 
  $fP = fSockOpen($host, $port, $errno, $errstr, $timeout); 
  if (!$fP) { return "down"; } 
  $tA = microtime(true); 
  return round((($tA - $tB) * 1000), 0)." ms"; 
}
 9
Author: Nick, 2011-09-10 09:24:33

Я лично использую службу Pingdom, если ее можно пинговать из Интернета и на ней работает HTTP-сервер. Нет необходимости действительно углубляться в написание специального сценария.

 3
Author: Rallias, 2011-10-02 04:59:04

Ну, насколько я знаю, вы не можете создать cronjob с помощью PHP, но то, что вы можете сделать, это использовать crontab

И это , чтобы вы могли пинговать на требуемый хост, также вы можете запустить вместо

exec("ping 1.2.3.4")

В вашем сценарии

 0
Author: elibyy, 2017-05-23 11:58:25