From 878600ca30ecd1641e0204c3b1a6666095742522 Mon Sep 17 00:00:00 2001 From: nekochemist Date: Fri, 17 Apr 2026 04:41:50 +0500 Subject: [PATCH] new file: .env.example new file: .gitignore new file: README.md new file: install.sh new file: ping-vps.service new file: ping-vps.sh new file: ping-vps.timer --- .env.example | 9 +++++++++ .gitignore | 1 + README.md | 1 + install.sh | 14 ++++++++++++++ ping-vps.service | 7 +++++++ ping-vps.sh | 37 +++++++++++++++++++++++++++++++++++++ ping-vps.timer | 11 +++++++++++ 7 files changed, 80 insertions(+) create mode 100644 .env.example create mode 100644 .gitignore create mode 100644 README.md create mode 100755 install.sh create mode 100644 ping-vps.service create mode 100755 ping-vps.sh create mode 100644 ping-vps.timer diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..d990ecc --- /dev/null +++ b/.env.example @@ -0,0 +1,9 @@ + +# .env.example +MATRIX_SERVER="" +MATRIX_TOKEN="" +MATRIX_ROOM="" +BOT_TOKEN="" +CHAT_ID="" +TARGET_IP="" +STATE_FILE="/tmp/ping_monitor_state" diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4c49bd7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.env diff --git a/README.md b/README.md new file mode 100644 index 0000000..547643f --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +очень простой скрипт об уведомлении меня о состоянии моей впс diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..c566128 --- /dev/null +++ b/install.sh @@ -0,0 +1,14 @@ +#!/bin/bash +set -e +if [ ! -f .env ]; then + echo "Нет .env файла, скопируй из .env.example" + exit 1 +fi +cp ./ping-vps.sh /usr/local/bin/ping-vps.sh +chmod +x /usr/local/bin/ping-vps.sh +cp ./ping-vps.service /etc/systemd/system/ping-vps.service +cp ./ping-vps.timer /etc/systemd/system/ping-vps.timer +systemctl daemon-reload +systemctl enable --now ping-vps.timer +systemctl list-timers +echo "Готово" diff --git a/ping-vps.service b/ping-vps.service new file mode 100644 index 0000000..96cb2c5 --- /dev/null +++ b/ping-vps.service @@ -0,0 +1,7 @@ +# /etc/systemd/system/ping-monitor.service +[Unit] +Description=Ping vps + +[Service] +Type=oneshot +ExecStart=/usr/local/bin/ping-vps.sh diff --git a/ping-vps.sh b/ping-vps.sh new file mode 100755 index 0000000..1586e8c --- /dev/null +++ b/ping-vps.sh @@ -0,0 +1,37 @@ +#!/bin/bash +# /usr/local/bin/ping_monitor.sh +source "$(dirname "$0")/.env" +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" diff --git a/ping-vps.timer b/ping-vps.timer new file mode 100644 index 0000000..eef911c --- /dev/null +++ b/ping-vps.timer @@ -0,0 +1,11 @@ +# /etc/systemd/system/ping-monitor.timer +[Unit] +Description=Run ping vps every 10 minutes + +[Timer] +OnBootSec=1min +OnUnitActiveSec=10min +AccurateSec=30s + +[Install] +WantedBy=timers.target