25 октября 2026 мониторингtelegram

Простые healthcheck-скрипты с уведомлениями в Telegram

Скрипт health.sh раз в пять минут проверяет сервер и пишет в Telegram, если состояние изменилось
Скрипт health.sh раз в пять минут проверяет сервер и пишет в Telegram, если состояние изменилось

Для пары домашних сервисов полноценный мониторинг — перебор. Мне достаточно знать две вещи: работает ли сервис прямо сейчас и когда он упал или поднялся. Всё это умещается в один bash-скрипт и таймер.

Проверяйте то, что видит пользователь

Самая частая ошибка — проверять, что процесс запущен или порт открыт. Сервис может отвечать на рукопожатие и при этом не отдавать данные. Я проверяю настоящий запрос и небольшое скачивание:

code=$(curl -s -o /dev/null -w '%{http_code}' -m 15 https://example.duckdns.org/health)
size=$(curl -s -o /dev/null -w '%{size_download}' -m 20 https://example.duckdns.org/files/256k.bin)
[ "$code" = 200 ] && [ "${size%.*}" = 262144 ] && healthy=1 || healthy=0

Не спамить: сообщать только о смене состояния

STATE=/var/lib/health/state
prev=$(cat "$STATE" 2>/dev/null || echo 1)
if [ "$healthy" != "$prev" ]; then
    text=$([ "$healthy" = 1 ] && echo "✅ Снова работает" || echo "❌ Сервис не отвечает")
    curl -s "https://api.telegram.org/bot$TG_TOKEN/sendMessage" \
        --data-urlencode "chat_id=$TG_CHAT" --data-urlencode "text=$text" >/dev/null
fi
echo "$healthy" > "$STATE"

Ещё одна мелочь, которая спасает от ложных тревог: считать «упавшим» только после двух неудачных проверок подряд. Одиночный таймаут сети не повод будить себя ночью.

Запуск по таймеру

Скрипт запускается systemd-таймером раз в пять минут. Если в скрипте что-то сломается, это сразу видно в journalctl, а не теряется молча, как в cron.

Бота для уведомлений создаёт @BotFather за минуту. Чтобы он мог вам писать, откройте его и нажмите «Start»: до этого Telegram не даст боту отправить первое сообщение.