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
This commit is contained in:
nekochemist 2026-04-17 04:41:50 +05:00
commit 878600ca30
7 changed files with 80 additions and 0 deletions

9
.env.example Normal file
View file

@ -0,0 +1,9 @@
# .env.example
MATRIX_SERVER=""
MATRIX_TOKEN=""
MATRIX_ROOM=""
BOT_TOKEN=""
CHAT_ID=""
TARGET_IP=""
STATE_FILE="/tmp/ping_monitor_state"

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
.env

1
README.md Normal file
View file

@ -0,0 +1 @@
очень простой скрипт об уведомлении меня о состоянии моей впс

14
install.sh Executable file
View file

@ -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 "Готово"

7
ping-vps.service Normal file
View file

@ -0,0 +1,7 @@
# /etc/systemd/system/ping-monitor.service
[Unit]
Description=Ping vps
[Service]
Type=oneshot
ExecStart=/usr/local/bin/ping-vps.sh

37
ping-vps.sh Executable file
View file

@ -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"

11
ping-vps.timer Normal file
View file

@ -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