#!/bin/bash # /usr/local/bin/ping_monitor.sh send_matrix() { curl -s -X PUT \ "${MATRIX_SERVER}/_matrix/client/v3/rooms/${MATRIX_ROOM}/send/m.room.message/$(date +%s%N)" \ -H "Authorization: Bearer ${MATRIX_TOKEN}" \ -H "Content-Type: application/json" \ -d "{\"msgtype\":\"m.text\",\"body\":\"$1\"}" } send_telegram() { curl -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \ -d chat_id="${CHAT_ID}" \ -d text="$1" } # Инициализация state [ ! -f "$STATE_FILE" ] && echo "up" >"$STATE_FILE" PREV_STATE=$(cat "$STATE_FILE") if ping -c 3 -W 5 "$TARGET_IP" >/dev/null 2>&1; then CURRENT_STATE="up" # Уведомить о восстановлении, если был down if [ "$PREV_STATE" = "down" ]; then send_matrix "✅ Сервер восстановлен: ${TARGET_IP} снова доступен" send_telegram "✅ Сервер восстановлен: ${TARGET_IP} снова доступен" fi else CURRENT_STATE="down" # Уведомить только если статус изменился (не спамить) if [ "$PREV_STATE" = "up" ]; then send_matrix "🔴 Сервер недоступен: ${TARGET_IP} не отвечает на ping" send_telegram "🔴 Сервер недоступен: ${TARGET_IP} не отвечает на ping" fi fi echo "$CURRENT_STATE" >"$STATE_FILE"