BashNotifier
Описание
Скрипты на Bash для отправки уведомлений из серверных скриптов. На данный момент реализация отправки в Telegram и Вконтакте (VK).
Языки
- Shell100%
О проекте Bash Notifier
Иногда возникает задача отправки уведомлений с сервера, прямо из скриптов, выполняемых в планировщике cron.
Раньше я отправлял email или sms, но будущее за мессенджерами, поэтому, удобно получать уведомления прямо на телефон в VKMessenger или Telegram.
Проект будет расширяться, хотелось еще добавить мессенджер Max, но он, на данный момент, недоступен для физ. лиц, если ситуация изменится - будет добавлен соответствующий скрипт
Демонстрация работы
tgsend - отправка в телеграм
tgsend "Привет, люди!"

vksend - отправка в ВК
vksend "Привет, люди!"

Базовая подготовка
Важный момент - скрипт должен быть доступен только привилегированному пользователю и недоступен никому более. В моем случае это root (к файлам которого никто не имеет доступ), но можно создать иного пользователя для этой цели, но кто станет рутом, тот это увидит даже на стороннем пользователе, единственный момент - уязвимость самих скриптов, которые запускаются под рутом. Главная цель - никто кроме определенного пользователя не может запускать и читать скрипт, т.к. в нем будут храниться ключи для api.
Поставим необходимый софт (опционально для вашего дистрибутива может быть yum install)
apt install curl grep jq coreutils
Создадим папку со скриптами и перейдем в неё
mkdir /root/scripts
cd /root/scripts
Срежем все права на всякий случай
chmod 700 /root/scripts/
Telegram Bash Notifier
Получение токена для api
- Пишем в Telegram @BotFather, пишем ему команду /start
- Пишем команду
, придумываем имя с постфиксом bot, например - myServerbot, запоминаем наш токен/newbot
На этом этапе у нас есть api Token
Получение USER_ID
- Пишем своему боту /start и привет...
- Открываем в браузере адрес (желательно в приватном режиме или почистить потом историю)
,https://api.telegram.org/bot<ТОКЕН>/getUpdates - Нас интересует
, там числовой кодfrom->id
На этом этапе у нас есть USER_ID
Установка и настройка
Перейдем в папку со скриптами
cd /root/scripts
Качаем скрипт
curl -o "tgSend.sh" https://gitverse.ru/api/repos/PavelBelyaev/BashNotifier/raw/branch/master/tgSend.sh
Задаем ему права (чтобы никто не прочитал и не запустил)
chmod 700 ./tgSend.sh
Открываем файл вашим любимым редакторов (vim, vi, nano ...)
nano ./tgSend.sh
И вписываем значения, которые мы получили выше
BOT_TOKEN="ваш токен"
CHAT_ID="ваш id"
А теперь при необходимости, чтобы в скриптах не задавать полный путь создадим симлинк в папке /sbin
ln -s /root/scripts/tgSend.sh /sbin/tgsend
Проверяем
tgsend "Hello World"
Bash VK Notifier
Получение токена для api
- Создаем паблик в вк, можно сделать его максимально приватным (в настройках выставить "частное")
- Заходим в Управление -> Дополнительно -> Работа с API -> Cоздать ключ (галочкой отмечаем доступ к сообщениям)
- Сверху в своем паблике видим "написать", пишем самому себе в сообщество.
- В диалоге сверху всплывет "разрешить сообществу писать мне", разрешаем, так ваш бот сможет вам писать.
- При входе в сообщество может всплывать уведомление о правилах использования ботов, его тоже принимаем, мы только для добрых целей планируем использовать бота и все правила будем соблюдать, иначе нас забанят и бот сломается.
На этом этапе у нас есть api Token
Получение USER_ID
- Заходим на свою страничку
- Жмем CTRL+U, чтобы увидеть исходный код
- В первых строках есть ID: XXXXX, его тоже копируем и запоминаем
На этом этапе у нас есть USER_ID
Установка и настройка
Перейдем в папку со скриптами
cd /root/scripts
Качаем скрипт
curl -o "vkSend.sh" https://gitverse.ru/api/repos/PavelBelyaev/BashNotifier/raw/branch/master/vkSend.sh
Задаем ему права (чтобы никто не прочитал и не запустил)
chmod 700 ./vkSend.sh
Открываем файл вашим любимым редакторов (vim, vi, nano ...)
nano ./vkSend.sh
И вписываем значения, которые мы получили выше
ACCESS_TOKEN="тут токен"
USER_ID="тут наш id, чтобы писать себе"
А теперь при необходимости, чтобы в скриптах не задавать полный путь создадим симлинк в папке /sbin
ln -s /root/scripts/vkSend.sh /sbin/vksend
Проверяем
vksend "Hello World"
Отправка везде и сразу
Очень редко, но бывают ситуации, когда какой-то из сервисов временно недоступен на час или больше, но это может быть критичным, поэтому можно отправлять везде и сразу, главное чтобы делать это без блокировки, если один скрипт долго не может достучаться до апи, то второй должен выполняться без задержек
Пока не будем рассматривать вариант, когда нет интернета, позже прикручу модем и буду проверять наличие интернета, если нет, то отправлять sms в зависимости от критичности уведомления...
#!/bin/bash
[ -z "$1" ] && exit 1
tgsend "$1" >/dev/null 2>&1 &
vksend "$1" >/dev/null 2>&1 &