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:
commit
878600ca30
7 changed files with 80 additions and 0 deletions
9
.env.example
Normal file
9
.env.example
Normal 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
1
.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
.env
|
||||||
1
README.md
Normal file
1
README.md
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
очень простой скрипт об уведомлении меня о состоянии моей впс
|
||||||
14
install.sh
Executable file
14
install.sh
Executable 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
7
ping-vps.service
Normal 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
37
ping-vps.sh
Executable 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
11
ping-vps.timer
Normal 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
|
||||||
Loading…
Add table
Add a link
Reference in a new issue