вдруг кому-то целую минуту сэкономлю) Или на мысль натолкну. Недавно сервак внезапно стал 502 отдавать по всем сайтам. А я узнал об этом спустя 30 минут, так получилось. 
                  
                  
                  
                  
                  
                  Вот и набросал код, который висит на кроне, который опрашивает Х сайтов раз в 5 минут. Повесил на сайты специально разной конфигурации: эво, рево, битрикс, вп, опенкарт, без админки вообще. И в телеграм группу с C-lvl моими падает сообщение, если что-то идёт не так.
                  
                  
                  Сейчас донастраиваю бота, чтобы можно было через условный /reboot по api перезагрузить сервер. 
                  
                  
                  
                  
                  
                  
                  
                  
                  <?php
                  
                  
                  
                  
                  
                  // Конфигурация Telegram API
                  
                  
                  $botToken = '';
                  
                  
                  $chatId = '';
                  
                  
                  
                  
                  
                  // Список сайтов для проверки
                  
                  
                  $urls = [
                  
                  
                      'https://site1.ru',
                  
                  
                    'https://site2.ru',
                  
                  
                    'https://site3.ru'
                  
                  
                  ];
                  
                  
                  
                  
                  
                  // Функция для проверки доступности сайта
                  
                  
                  function isSiteAvailable($url) {
                  
                  
                      // Проверка правильности URL
                  
                  
                      if (!filter_var($url, FILTER_VALIDATE_URL)) {
                  
                  
                          return false;
                  
                  
                      }
                  
                  
                  
                  
                  
                      // Инициализация cURL
                  
                  
                      $curlInit = curl_init($url);
                  
                  
                  
                  
                  
                      // Установка параметров запроса
                  
                  
                      curl_setopt($curlInit, CURLOPT_CONNECTTIMEOUT, 10); // Максимальное время ожидания подключения (в секундах)
                  
                  
                      curl_setopt($curlInit, CURLOPT_HEADER, true);       // Получение заголовка ответа
                  
                  
                      curl_setopt($curlInit, CURLOPT_NOBODY, true);       // Исключение тела ответа
                  
                  
                      curl_setopt($curlInit, CURLOPT_RETURNTRANSFER, true); // Возвращение результата в виде строки
                  
                  
                      curl_setopt($curlInit, CURLOPT_FOLLOWLOCATION, true); // Следование за редиректами
                  
                  
                  
                  
                  
                      // Выполнение запроса
                  
                  
                      $response = curl_exec($curlInit);
                  
                  
                  
                  
                  
                      // Получение HTTP-кода ответа
                  
                  
                      $httpCode = curl_getinfo($curlInit, CURLINFO_HTTP_CODE);
                  
                  
                  
                  
                  
                      // Закрытие cURL-сессии
                  
                  
                      curl_close($curlInit);
                  
                  
                  
                  
                  
                      // Логирование кода ответа (для отладки)
                  
                  
                      error_log("HTTP-код ответа для $url: $httpCode");
                  
                  
                  
                  
                  
                      // Считаем сайт доступным только если код ответа в диапазоне 200-299
                  
                  
                      return ($httpCode >= 200 && $httpCode < 300);
                  
                  
                  }
                  
                  
                  
                  
                  
                  // Переменные для хранения доступных и недоступных сайтов
                  
                  
                  $unavailableSites = [];
                  
                  
                  $availableSites = [];
                  
                  
                  
                  
                  
                  // Проверка доступности каждого сайта и заполнение списков
                  
                  
                  foreach ($urls as $url) {
                  
                  
                      if (isSiteAvailable($url)) {
                  
                  
                          $availableSites[] = $url; // Сайт доступен
                  
                  
                      } else {
                  
                  
                          $unavailableSites[] = $url; // Сайт недоступен
                  
                  
                      }
                  
                  
                  }
                  
                  
                  
                  
                  
                  // Обработка состояний доступности сайтов
                  
                  
                  if (count($unavailableSites) === count($urls)) {
                  
                  
                      // Если все сайты недоступны, отправляем соответствующее сообщение в Telegram
                  
                  
                      $message = "Все сайты недоступны. Пожалуйста, проверьте их состояние.";
                  
                  
                      sendMessageToTelegram($botToken, $chatId, $message);
                  
                  
                      echo "Все сайты недоступны. Отправлено уведомление в Telegram.";
                  
                  
                  } elseif (count($availableSites) === count($urls)) {
                  
                  
                      // Если все сайты доступны, ничего не делаем
                  
                  
                      echo "Все сайты доступны. Уведомления не отправляются.";
                  
                  
                  } else {
                  
                  
                      // Если только некоторые сайты недоступны, отправляем список недоступных сайтов
                  
                  
                      $unavailableSitesList = implode(", ", $unavailableSites);
                  
                  
                      $message = "Эти сайты недоступны: $unavailableSitesList.";
                  
                  
                      sendMessageToTelegram($botToken, $chatId, $message);
                  
                  
                      echo "Некоторые сайты недоступны. Отправлено уведомление в Telegram.";
                  
                  
                  }
                  
                  
                  
                  
                  
                  // Функция для отправки сообщения в Telegram
                  
                  
                  function sendMessageToTelegram($botToken, $chatId, $message) {
                  
                  
                      $url = "https://api.telegram.org/bot$botToken/sendMessage";
                  
                  
                      $data = [
                  
                  
                          'chat_id' => $chatId,
                  
                  
                          'text' => $message,
                  
                  
                      ];
                  
                  
                  
                  
                  
                      $options = [
                  
                  
                          'http' => [
                  
                  
                              'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
                  
                  
                              'method'  => 'POST',
                  
                  
                              'content' => http_build_query($data),
                  
                  
                          ],
                  
                  
                      ];
                  
                  
                  
                  
                  
                      $context  = stream_context_create($options);
                  
                  
                      $result = file_get_contents($url, false, $context);
                  
                  
                  
                  
                  
                  }
                  
                  
                  ?>
                  
                  
                
Советую ознакомиться: templatesEdit3
Стикер
 Andrey
                          Ivanov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Andrey
                          Ivanov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  не понял)
Забикс? он умеет sh дергать при инцидентах. А в sh уже в тг сообщение или письмо, всё что угодно
угуу... я вот писал выше - что для серьезного кол-ва проектов уже надо забикс поднимать
вот я тоже зачем писать свой велик если есть готовых систем куча большая с более гибким мониторингом, хотя свой велик ближе к жопе телу и приятно иметь ловкую самодельную систему
Можно в вк утащить? Или лучше в Быстрые решения на сайт сообщества, я "оттуда" опубликую)
 Andrey
                          Ivanov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Andrey
                          Ivanov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Опубликуйте, пожалуйста, на сайте сообщества. Будет прям ооочень хорошо
хуета какая-то
кот добрый. пришел всем говна за шиворот накидал
Обсуждают сегодня