@steweeee

Как пересылать сообщения из лога Linux в Telegram?

Всем привет.

Дано:
- Linux-сервер с /var/log/messages
- Telegram-бот и группа

Задача:
- Отправлять вывод лога /var/log/messages в момент появления в нём сообщений в Telegram

Есть скрипт:


#!/bin/bash
#
TG_BOT_ID=AAAABBBBCCCCDDDD
TG_CHAT_ID=00001111
#
curl -s -X POST https://api.telegram.org/bot$TG_BOT_ID/sendMessage -d chat_id=$TG_CHAT_ID -d text="$(tail -n 1 /var/log/messages)"


При однократном запуске скрипта в телегу отправится одно последнее сообщение из лога и скрипт завершает свою работу. Логично было бы использовать

text="$(tail -f -n 1 /var/log/messages)"

но это не работает.
Пробовал разные конструкции с перенаправлением вывода, но решения тоже не нашёл
  • Вопрос задан
  • 592 просмотра
Решения вопроса 1
@steweeee Автор вопроса
tail -f в Telegram не транслируется.

Но найден рабочий вариант.
Основной скрипт (tgsendmsg.sh) должен иметь вид:
#!/bin/bash
TG_BOT_ID=AAAABBBBCCCCDDDD
TG_CHAT_ID=00001111
while read LINE; do
        curl -s -X POST https://api.telegram.org/bot$TG_BOT_ID/sendMessage -d chat_id=$TG_CHAT_ID -d text="$LINE"
done


Отправка в телегу:
tail -f -n 1 /var/log/messages | ./tgsendmsg.sh

Надеюсь кому-то пригодится
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
Ну понятно что так работать не будет.
Надо запускать скрипт в фоне и читать постоянно, например так

#!/bin/bash
TG_BOT_ID=AAAABBBBCCCCDDDD
TG_CHAT_ID=00001111

tail -f -n 1 /var/log/messages | while read LINE; do
  curl -s -X POST https://api.telegram.org/bot$TG_BOT_ID/sendMessage -d chat_id=$TG_CHAT_ID -d text="$LINE"
done


таким образом при запуске скрипта, в телеграм отправится последняя строчка,после чего скрипт будет висеть и отправлять новые строчки по мере их появления.
Главное обеспечить запуск скрипта в фоне при рестарте
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы