В последнее время увлекаюсь Pythonом. Хотелось написать что-то более существенное, чем коды типа helloworld. Поскольку с интересом смотрел еще и в сторону ботов телеграмма, родилась идея создать бота, который бы запускал команды или скрипты на удаленном сервере (linux) и возвращал бы результат в телеграмм. Зачем? Удобно! Не надо логиниться на сервак, чтобы получить информацию о нагрузке на процессор, свободной памяти или объеме диска. Можно даже запускать скрипты.

И так изучаем python и api telegram bot, регистрируем своего бота в телеграмм, скачиваем готовые скрипты, запускаем их на своем серваке и меняем config.py под себя.

Поехали по порядку:

1) Регистрация бота телеграмм. Находим отца всех ботов – @BotFather. Пишем ему:

/newbot

В ответ на его сообщение вводим имя вашего нового бота. Оно обязательно должно иметь на конце слово bot.

moi_novii_bot

Если имя не занято и оно введено верно, то вы получите токкен – вам необходимо будет его скопировать в файл config.py скрипта:

token = ' '

2) Загружаем скрипт. Это первая тестовая версия скрипта – для того чтобы оценить возможности во-первых самого питона, во-вторых – бота telegram. Приветствуются любые пожелания и предложения – допилю. Можете сами что-то добавить – просьба тоже поделится. Каковы возможности программы (их можно посмотреть набрав в своем боте /help):

  • посмотреть сетевые настройки (запускает на сервере команду ifconfig)
  • получить информацию о дисковом пространстве (запускает на сервере команду df -h)
  • получить информацию о памяти (запускает на сервере команду free -m)
  • получить информацию о нагрузке на процессор (запускает на сервере команду mpstat)
  • получить информацию о размере папки, заданной в config.py (запускает на сервере команду du -sh имя папки)
  • проверяет наличие и размер файла в папке (запускает на сервере команду ls -lh файл). Делаю бэкап базы 1с в монтируемую сетевую папку с именем файла по дате – поэтому возникла такая необходимость.

Что еще планирую реализовать: запуск любого скрипта (возможно без вывода всего выполнения, а только конечного результата), улучшить вывод результата – более удобочитаемого, сбор статистики в базу данных и вывод графиков по нагрузкам и т.п.

Для запуска скрипта необходим python 3 и python-telegram-bot. У меня стоит centOS. Там уже стоит 2 версия питона. Ставим рядом 3 питон и библиотеку для работы бота:

wget http://www.python.org/ftp/python/3.3.2/Python-3.6.0.tar.xz
yum install xz
tar -xpJf Python-3.6.0.tar.xz
cd Python-3.6.0
yum groupinstall "Development tools"
./configure
make
make install
ln -s /usr/local/bin/python3 /usr/bin/python3
pip3 install python-telegram-bot --upgrade

Состав скрипта:

bot – файл bash-скрипта запускающего python3 bot.py
bot.py – непосредственно сам скрипт бота. Тем кто знаком с питоном – добро пожаловать внутрь.
config.py – хранит настройки. Туда вписываете токкен, полученный в телеграмме. Затем запускаете скрипт.

В приложение телеграмма вводите:

/id

Таким образом вы получаете ваш личный id. Его необходимо ввести в строку (вместо 123456789) admin = [‘123456789’]. Это сделано в целях безопасности, чтобы остальные команды могли вводить только пользователи с определенных аккаунтов телеграмма. Можно через запятую прописать несколько id: admin = [‘123456789’, ‘987654321’].

В строке dir1 прописываем путь к папке объем которого бы мы хотели контролировать (у меня это путь до папки с базами pgsql)

В строке dir_backup – путь к папке где лежит файл, объем (или наличие) которого необходимо контролировать. У меня это файл вида 20170218.tar.gz. По умолчанию именно вариант с названием файла годмесяцдата.tar.gz проверяется. Если вы хотите изменить маску проверяемого файла, то вам необходимо найти и отредактировать в файле bot.py строку

filebackup = config.dir_backup + cur_year + cur_month + cur_day + '.tar.gz'  #формируем имя файла для поиска

Имейте ввиду, что дальнейшем при исправлении файла config.py вам не нужно будет перезапускать скрипт. Все настройки перечитываются скриптом каждый раз заново.

Неплохо бы добавить этот скрипт в автозагрузку. Для CentOS 7:

touch /etc/systemd/system/telegram-bot.service
chmod 664 /etc/systemd/system/telegram-bot.service

Содержимое этого файла:

[Unit]
Description=Telegram bot
After=network.target

[Service]
Type=simple
User= от имени кого запускать
ExecStart=путь к файлу bot.sh (в этом файле тогда надо прописать полный путь до bot.py)

[Install]
WantedBy=multi-user.target

Стартуем новый сервис:

systemctl start telegram-bot.service

Добавляем его в автозагрузку:

systemctl enable telegram-bot.service

Проверяем статус:

systemctl status telegram-bot.service

Можем вводить команды. Начинаем с /help.

> Ссылка на архив со скриптом

Спасибо, riot26 за выкладку на githab:
gist.github.com/riot26/bb55e8a19fae0b58d687040c54cbc148
Поделиться с друзьями
-->

Комментарии (18)


  1. tmnhy
    20.02.2017 15:47
    +1

    > Ссылка на архив со скриптом

    А репозитория нет? Посмотреть интересно, но не до такой степени, чтобы что-то качать, да ещё и устанавливать.

    ./configure
    make
    make install

    Не надо так! Есть же вирт. окружение!


    1. riot26
      20.02.2017 15:59

      gist
      вдруг кто-то захочет посмотреть


  1. tmnhy
    20.02.2017 16:12

    Спасибо, riot26, посмотрел код.

    А почему питон, а не пхп или вообще bash?


    1. il_da_r
      20.02.2017 16:45
      +2

      Bash для работы с telegram bot? Если реализуете, то вам респект!
      Питон потому, что изучаю именно этот язык в данный момент.


      1. tmnhy
        20.02.2017 16:46

        А что там сложного?

        Вот, например, https://github.com/topkecleon/telegram-bot-bash


        1. il_da_r
          20.02.2017 16:53

          О, здорово! Спасибо! Не знал! Поковыряю.
          Изучаю Python просто вот и реализовал. Так сказать практика!


          1. il_da_r
            20.02.2017 17:04

            Кстати этот скрипт кросплатформенный (так в защиту питона). Можно опрашивать и windows машины — только исправить (добавить) команды.


            1. Zeka13
              21.02.2017 11:38

              а Bash не «кросплатформенный»? В Windows 10 же завезли уже. Если уж претендуете на несколько платформ, то это должно из коробки и работать, а не «нужно правда для Windows добавить все проверки с нуля».


              1. il_da_r
                21.02.2017 16:24

                Цель создать универсальное решение есть конечно, но в будущем, по мере освоения питона и ботостроения. Не надо уж слишком серьезно относиться к этому продукту — это пока проба «пера». Мне бы получить отзыв по тому — какой функционал реализовать.


                1. tmnhy
                  21.02.2017 16:40

                  Мне бы получить отзыв по тому — какой функционал реализовать.

                  Если в том направлении, что у вас, т.е. мониторинг ресурсов, то дёргать бота командами, чтобы он написал в ответ — так никто не будет делать.

                  По идее, помимо команд, логикой бота должна быть предусмотрена рассылка алертов. Т.е. на сервере идёт мониторинг и по расписанию скидывается админу необходимая информация, либо алерт, по какому-то правилу, если что-то пошло не так.

                  Это всё реализуется связкой крон+POST-запрос, без всякого навороченного API и питона.


                  1. il_da_r
                    21.02.2017 17:23

                    Все это реализуется zabbixом ))


                    1. tmnhy
                      21.02.2017 18:16

                      Все это реализуется zabbixом ))

                      Воооот!
                      Зачем бот тогда?


      1. aavezel
        20.02.2017 22:15

        curl доступен даже из bat файлов )


  1. msa
    20.02.2017 23:38

    Похожий проект, без питона в зависимостях — shell2telegram


  1. saintbyte
    21.02.2017 16:09

    Не, все прикольно, но зачем? Реализация ssh over telegram?


    1. il_da_r
      21.02.2017 16:12

      Да все верно! For fun! так сказать! Еще один вариант. Естественно, это не заменяет мне системы мониторинга — zabbix, например.


      1. saintbyte
        21.02.2017 18:28

        Нечем заняться — сделайте бота который будет следить за новыми постами на хабре =)


        1. shpaker
          22.02.2017 07:32

          Легион таких, даже у меня есть https://t.me/tmfeed
          И код на гитхаб. Но только осторожно, немного наколеночного https://github.com/shpaker/pyFeedsTgBot/