Удалённый мониторинг компьютера с телефона

  Представим ситуацию - у вас дома стоит компьютер, который должен быть постоянно включен и в сети. И если он не работает даже полчаса - это плохо. Как узнать об этом факте, если вы постоянно ездите по городу и не сидите дома? 

  Конечно, решений много. Есть платные сервисы для мониторинга. Есть умные розетки с GSM. Но! Сервисы платные, а хотелось бы бесплатно. А розетка, во-первых, дорогая (я нашел от 5тр), во-вторых она сообщит только если эл. энергию отключат. А вот если на компе пропадёт инет или если он тупо зависнет - тут розетка не поможет. 


 

  Как я решил проблему удалённого мониторинга компа бесплатно и относительно просто.

  Если совсем в двух словах как это работает - контролируемый комп шлёт каждые 2 (3,4 - сколько надо) мин запрос на хостинг. Хостинг это видит и проверяет. Если запросов нет более 2х минут - хостинг шлёт сообщение в телеграм. Всё. Теперь подробнее.

  Для этого нам понадобится хостинг с CRON, 2 скрипта php и программка curl.

  Хостинг нынче вообще не проблема, а для меня это насущная необходимость - там крутятся несколько моих сайтов, а также сайты моих клиентов, которые я поддерживаю.

 Общий принцип - комп через утилиту curl (https://curl.se/download.html) отправляет запросы на сервер (хостинг) скажем каждые 2 минуты. Curl просто распаковываем на рабочий стол одной папкой, в планировщике заданий создаём задачу, в разделе триггеры - при включении компьютера, ставим галочку "выполнить с наивысшими правами", повторять бесконечно каждые 2 минуты, в разделе действия - программа - указываем путь к curl.exe, в поле аргументы пишем http://test.xxx.ru/ping.php, во вкладке "общие" меняем учётную запись на СИСТЕМА - именно через капслок - это чтобы у нас не мелькало на экране каждые 2 минуты окно комстроки.

  На хостинге создаём поддомен (папку), например test.xxx.ru. В папку test кидаем 2 скрипта - check_request.php и ping.php . Настраиваем на сервере CRON (планировщик заданий сервера - в поле исполняемая команда пишем curl http://test.xxx.ru/check_request.php), который каждые 3 минуты проверяет скрипт check_request.php, который в свою очередь смотрит на дату создания файла check_request.txt. Этот файл пересоздаётся каждые 2 минуты скриптом ping.php, который пишет в файл IP адрес обратившегося через curl компа. Если файл не обновлялся более трёх минут, скрипт check_request.php отправляет сообщение на бот в телеге. 

Скрипт check_request:

------------------------------------------------------------------------------------------------------------------

 <?php

#тут прописываем токен бота
define('TELEGRAM_TOKEN', '15996:AAEfZYexmF4');

#тут прописываем chat ID
define('TELEGRAM_CHATID', '-458');

#Функция отправки сообщений в телеграм
function message_to_telegram($text)
{
    $ch = curl_init();
    curl_setopt_array(
        $ch,
        array(
            CURLOPT_URL => 'https://api.telegram.org/bot' . TELEGRAM_TOKEN . '/sendMessage',
            CURLOPT_POST => TRUE,
            CURLOPT_RETURNTRANSFER => TRUE,
            CURLOPT_TIMEOUT => 10,
            CURLOPT_POSTFIELDS => array(
                'chat_id' => TELEGRAM_CHATID,
                'text' => $text,
            ),
        )
    );
    curl_exec($ch);
}
#файл который проверяем
$filename = 'check_request.txt';

#получаем разница даты текущего времени и время последнего изменения в файле в секундах
$difference = time() - filemtime($filename); //seconds


#проверяем если дата последнего изменения была больше значения, в данном случае 600 то есть 10 минут, отправляем в телеграм сообщение
if ($difference > 600)
    #текст сообщения можно изменить тут
        message_to_telegram('Запросов на сервер не было больше 10 минут');
?>

------------------------------------------------------------------------------------------------------------------

 скрипт ping:

------------------------------------------------------------------------------------------------------------------

<?php
// строка, которую будем записывать. передаем IP адрес клиента который обратился на страницу
$ip = $_SERVER['REMOTE_ADDR'];
//делается попытка создать его
$fp = fopen("check_request.txt", "w");
// записываем в файл текст
fwrite($fp, $ip);
// закрываем
fclose($fp);
 ?>

------------------------------------------------------------------------------------------------------------------

  Бот в телеграме создаётся за 2 минуты - открываем бота https://telegram.me/BotFather , там пишем /newbot, выбираем имя, которое будет отображаться в списке контактов, и адрес. Например, «Бот для DTF» с адресом «dtf_news_bot». Потом создаём группу и включаем в неё этого бота (ищем по адресу dtf_news_bot). Да, адрес бота должен заканчиваться на bot, иначе не даст создать.  

  После создания бота BotFather нам пришлёт сообщение типа Use this token to access the HTTP API:
151372tAzDexmF4 , этот токен может пригодиться в скрипте. Также в скрипте нужен TELEGRAM_CHATID, который  можно узнать после создания бота, перейдя в браузере по ссылке https://api.telegram.org/bot156:AAEf7exmF4/getupdates, где AAEf7exmF4 - токен, сообщённый нам BotFather

  Для того, чтобы всякие поисковые боты и прочая дрянь не активировали наш скрипт, в папку test на сервере кидаем также файл robots.txt, в котором пишем:
User-agent: *
Disallow: /check_request.php
Disallow: /ping.php

  В принципе всё. Если настроили как надо, при отсутствии целевого компа в сети более трёх минут получим сообщение от бота.

  Большое спасибо за неоценимую помощь в создании этого материала Фёдору - системному администратору, программисту и просто очень хорошему человеку, который пару лет назад поменял наши сибирские морозы на московскую слякоть и похоже об этом ни капельки не жалеет 😀 😀

Комментариев нет:

Отправить комментарий