Для начала создайте бота в Telegram с помощью @BotFather, от него и буду приходить уведомления с сервера.
С помощью бота @MyTelegramID_bot узнаем свой ID аккаунта.
Заходим на наш сервер и создаем файл .py. Открываем его любым текстовым редактором и вносим туда этот код:
#!/usr/bin/python3
from urllib.parse import urlparse, urlencode
from urllib.request import urlopen
import argparse, sys
token = 'TOKEN_BOT'
id = 'ID_USER'
host = sys.argv[1]
parser = argparse.ArgumentParser()
parser.add_argument('-m', default=host, dest='MESSAGE')
namespace = parser.parse_args()
message = namespace.MESSAGE
turl = 'https://api.telegram.org/bot'
tfull = '{0}{1}/sendMessage'.format(turl, token)
tparams = urlencode({'chat_id': id, 'text': message}).encode('utf-8')
urlopen(tfull, tparams)
Или тоже самое можно написать bash-скриптом:
#!/bin/bash ID_USER=475831490 TOKEN_BOT=534993854:AAFK4lkRNp5-MyvHH8l-EbpoNKD7_EsDdvI message=$1 curl -s -X POST "https://api.telegram.org/bot"$TOKEN_BOT"/sendMessage" -F chat_id=$ID_USER -F text="$message"
Где,
TOKEN_BOT — токен созданного Вами бота.
ID_USER — ID Вашего аккаунта. Он необходим для того, чтобы уведомление бот присылал только Вашему аккаунту. Другие, кто добавит бота, получать уведомление не будут.
Для начала сделайте скрипт исполняемым командой:
chmod +x file_name.py
И проверим, работает ли. Отправим команду, чтобы бот отписал нам простое сообщение «Hello, world!»:
python3 file_name.py -m "Hello, world!"
Обратите внимание, что обязательно нужно указывать опцию -m, а сообщение должно быть в скобках («»).
Как можно использовать?
Допустим, Вы запустили на сервере команду, которая выполняется достаточно длинное время. Можно использовать скрипт для уведомления о завершении команды. Например:
какая_то_длинная_команда | python3 file_name.py -m "Выполнение завершено"
Или, чтобы не писать каждый раз полный запуск команды скрипта, создадим алиас с названием send:
alias send='python3 ~/file_name.py'
Где, ~/file_name.py — полный пусть к скрипту.
Теперь уведомление о завершении можно будет прописать так:
какая_то_длинная_команда | send -m "Выполнение завершено"
Можно так же использовать скрипт для отправки логов. К примеру напишем скрипт для вывода логов авторизации, apache и fail2ban:
#!/bin/bash logs=$(echo -e "\n Auth" ; tail -n 10 /var/log/auth.log ; echo -e "\n Fail2ban" ; tail -n 10 /var/log/fail2ban.log ; echo -e "\n Apache" ; tail -n 10 /var/log/apache2/error.log) python3 ~/file_name.py -m "$logs"
И добавим запись в cron, чтобы скрипт выполнялся (например) каждые 30 минут:
crontab-e */30 * * * * /log_sent_telegram.sh
После чего Вам бот будет присылать каждые 30 минут эти логи.
Так же, можно использовать такой же метод для проверки доступности какого-то сайта методом пинг. Скрипт выглядит так:
#!/bin/bash IP='lexblog.org' ping -c 1 $IP 2>/dev/null 1>/dev/null if [ "$?" = 0 ] then echo "good" else python3 ~/tgsend.py -m "example.tdl [not available]" fi
И добавляете в cron с интервалом выполнения 5 минут:
*/5 * * * * ~/ping_check.sh