В последнее время увлекаюсь Pythonом. Хотелось написать что-то более существенное, чем коды типа helloworld. Поскольку с интересом смотрел еще и в сторону ботов телеграмма, родилась идея создать бота, который бы запускал команды или скрипты на удаленном сервере (linux) и возвращал бы результат в телеграмм. Зачем? Удобно! Не надо логиниться на сервак, чтобы получить информацию о нагрузке на процессор, свободной памяти или объеме диска. Можно даже запускать скрипты.
И такизучаем python и api telegram bot, регистрируем своего бота в телеграмм, скачиваем готовые скрипты, запускаем их на своем серваке и меняем config.py под себя.
Поехали по порядку:
1) Регистрация бота телеграмм. Находим отца всех ботов – @BotFather. Пишем ему:
В ответ на его сообщение вводим имя вашего нового бота. Оно обязательно должно иметь на конце слово bot.
Если имя не занято и оно введено верно, то вы получите токкен – вам необходимо будет его скопировать в файл config.py скрипта:
2) Загружаем скрипт. Это первая тестовая версия скрипта – для того чтобы оценить возможности во-первых самого питона, во-вторых – бота telegram. Приветствуются любые пожелания и предложения – допилю. Можете сами что-то добавить – просьба тоже поделится. Каковы возможности программы (их можно посмотреть набрав в своем боте /help):
Что еще планирую реализовать: запуск любого скрипта (возможно без вывода всего выполнения, а только конечного результата), улучшить вывод результата – более удобочитаемого, сбор статистики в базу данных и вывод графиков по нагрузкам и т.п.
Для запуска скрипта необходим python 3 и python-telegram-bot. У меня стоит centOS. Там уже стоит 2 версия питона. Ставим рядом 3 питон и библиотеку для работы бота:
Состав скрипта:
В приложение телеграмма вводите:
Таким образом вы получаете ваш личный id. Его необходимо ввести в строку (вместо 123456789) admin = [‘123456789’]. Это сделано в целях безопасности, чтобы остальные команды могли вводить только пользователи с определенных аккаунтов телеграмма. Можно через запятую прописать несколько id: admin = [‘123456789’, ‘987654321’].
В строке dir1 прописываем путь к папке объем которого бы мы хотели контролировать (у меня это путь до папки с базами pgsql)
В строке dir_backup – путь к папке где лежит файл, объем (или наличие) которого необходимо контролировать. У меня это файл вида 20170218.tar.gz. По умолчанию именно вариант с названием файла годмесяцдата.tar.gz проверяется. Если вы хотите изменить маску проверяемого файла, то вам необходимо найти и отредактировать в файле bot.py строку
Имейте ввиду, что дальнейшем при исправлении файла config.py вам не нужно будет перезапускать скрипт. Все настройки перечитываются скриптом каждый раз заново.
Неплохо бы добавить этот скрипт в автозагрузку. Для CentOS 7:
Содержимое этого файла:
Стартуем новый сервис:
Добавляем его в автозагрузку:
Проверяем статус:
Можем вводить команды. Начинаем с /help.
→ Ссылка на архив со скриптом
Спасибо, riot26 за выкладку на githab:
gist.github.com/riot26/bb55e8a19fae0b58d687040c54cbc148
И так
Поехали по порядку:
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
