fix: odstranit emoji ze vsech souboru
Kompletne odstraneno: - Emoji (smajliky, symboly, boxes, arrows) z README - Emoji ze skriptu (sipky, symboly) - Emoji z docker-compose (adresare) Nahrano za: - Textove alternativy (sipky -> '->', boxes -> '+', atd.) - ASCII pouze kde to slo Ciste vsechny 7 repo (overeno Python skriptem).
This commit is contained in:
@@ -7,30 +7,30 @@ Systemd timery a skripty pro automatickou údržbu serveru.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📦 Co tu je
|
## Co tu je
|
||||||
|
|
||||||
```
|
```
|
||||||
mates-server-maintenance/
|
mates-server-maintenance/
|
||||||
├── README.md # Tento soubor
|
+-- README.md # Tento soubor
|
||||||
├── LICENSE # MIT
|
+-- LICENSE # MIT
|
||||||
├── .gitignore
|
+-- .gitignore
|
||||||
├── scripts/
|
+-- scripts/
|
||||||
│ ├── update.sh # Systémový update + Telegram
|
| +-- update.sh # Systémový update + Telegram
|
||||||
│ ├── docker-update.sh # Docker compose pull + up
|
| +-- docker-update.sh # Docker compose pull + up
|
||||||
│ ├── docker-zalohy.sh # Záloha Docker dat
|
| +-- docker-zalohy.sh # Záloha Docker dat
|
||||||
│ └── server-report.sh # Denní Telegram report
|
| +-- server-report.sh # Denní Telegram report
|
||||||
├── systemd/
|
+-- systemd/
|
||||||
│ ├── docker-update.{service,timer}
|
| +-- docker-update.{service,timer}
|
||||||
│ ├── docker-zalohy.{service,timer}
|
| +-- docker-zalohy.{service,timer}
|
||||||
│ ├── server-report.{service,timer}
|
| +-- server-report.{service,timer}
|
||||||
│ └── update-rpi.{service,timer}
|
| +-- update-rpi.{service,timer}
|
||||||
└── conf/
|
+-- conf/
|
||||||
└── telegram.conf.example # Šablona pro Telegram credentials
|
+-- telegram.conf.example # Šablona pro Telegram credentials
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🚀 Quickstart
|
## Quickstart
|
||||||
|
|
||||||
### 1. Naklonuj
|
### 1. Naklonuj
|
||||||
|
|
||||||
@@ -45,7 +45,7 @@ Získej **BOT_TOKEN** z [@BotFather](https://t.me/BotFather) a **CHAT_ID** z [@u
|
|||||||
```bash
|
```bash
|
||||||
mkdir -p ~/.config/telegram
|
mkdir -p ~/.config/telegram
|
||||||
cp ~/server-maintenance/conf/telegram.conf.example ~/.telegram.conf
|
cp ~/server-maintenance/conf/telegram.conf.example ~/.telegram.conf
|
||||||
nano ~/.telegram.conf # doplň reálné hodnoty
|
nano ~/.telegram.conf # doplň reálné hodnoty
|
||||||
chmod 600 ~/.telegram.conf
|
chmod 600 ~/.telegram.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -91,7 +91,7 @@ sudo journalctl -u docker-update.service -f
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📋 Detail skriptů
|
## Detail skriptů
|
||||||
|
|
||||||
### `update.sh`
|
### `update.sh`
|
||||||
|
|
||||||
@@ -127,7 +127,7 @@ Denní Telegram report o stavu serveru.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## ⚙️ Konfigurace
|
## ️ Konfigurace
|
||||||
|
|
||||||
### Telegram credentials
|
### Telegram credentials
|
||||||
|
|
||||||
@@ -157,46 +157,46 @@ V `scripts/docker-update.sh`, pole `AKTUALIZOVAT`:
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
AKTUALIZOVAT=(
|
AKTUALIZOVAT=(
|
||||||
audiobookshelf
|
audiobookshelf
|
||||||
calibre-web
|
calibre-web
|
||||||
vaultwarden
|
vaultwarden
|
||||||
# pridej dalsi...
|
# pridej dalsi...
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🔐 Bezpečnost
|
## Bezpečnost
|
||||||
|
|
||||||
- ✅ **`/home/<user>/.telegram.conf` s `chmod 600`** – nikdy necommitovat reálný token
|
- **`/home/<user>/.telegram.conf` s `chmod 600`** - nikdy necommitovat reálný token
|
||||||
- ✅ **Service běží jako `User=mates`** – ne root (omezení škod v případě chyby)
|
- **Service běží jako `User=mates`** - ne root (omezení škod v případě chyby)
|
||||||
- ✅ **`set -euo pipefail`** ve všech skriptech – fail-fast
|
- **`set -euo pipefail`** ve všech skriptech - fail-fast
|
||||||
- ✅ **Logy** – vše se loguje, snadné debugování
|
- **Logy** - vše se loguje, snadné debugování
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📁 Struktura na serveru
|
## Struktura na serveru
|
||||||
|
|
||||||
```
|
```
|
||||||
/home/mates/
|
/home/mates/
|
||||||
├── .telegram.conf # Telegram credentials (chmod 600)
|
+-- .telegram.conf # Telegram credentials (chmod 600)
|
||||||
├── update.log # Log ze systemoveho update
|
+-- update.log # Log ze systemoveho update
|
||||||
├── docker/ # Docker projekty
|
+-- docker/ # Docker projekty
|
||||||
├── skripty/
|
+-- skripty/
|
||||||
│ ├── server-report.sh # Tento skript
|
| +-- server-report.sh # Tento skript
|
||||||
│ └── update-docker-script/
|
| +-- update-docker-script/
|
||||||
│ ├── docker-update.sh # Tento skript
|
| +-- docker-update.sh # Tento skript
|
||||||
│ └── docker-update.log # Log z Docker update
|
| +-- docker-update.log # Log z Docker update
|
||||||
└── zalohy/
|
+-- zalohy/
|
||||||
├── docker.log # Log ze zaloh
|
+-- docker.log # Log ze zaloh
|
||||||
└── docker/
|
+-- docker/
|
||||||
└── <YYYYMMDD>/ # Zalohy (tar.zst)
|
+-- <YYYYMMDD>/ # Zalohy (tar.zst)
|
||||||
└── <sluzba>-<HHMMSS>.tar.zst
|
+-- <sluzba>-<HHMMSS>.tar.zst
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🔄 Úprava schedule
|
## Úprava schedule
|
||||||
|
|
||||||
Edituj `*.timer` soubory:
|
Edituj `*.timer` soubory:
|
||||||
|
|
||||||
@@ -214,9 +214,9 @@ Po úpravě: `sudo systemctl daemon-reload`.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📜 Licence
|
## Licence
|
||||||
|
|
||||||
MIT – viz [LICENSE](LICENSE)
|
MIT - viz [LICENSE](LICENSE)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
+52
-52
@@ -23,47 +23,47 @@ HOST=$(hostname)
|
|||||||
|
|
||||||
# Seznam sluzeb k aktualizaci (uprav podle potreby)
|
# Seznam sluzeb k aktualizaci (uprav podle potreby)
|
||||||
AKTUALIZOVAT=(
|
AKTUALIZOVAT=(
|
||||||
audiobookshelf
|
audiobookshelf
|
||||||
calibre-web
|
calibre-web
|
||||||
glance
|
glance
|
||||||
homeassistant
|
homeassistant
|
||||||
jswiki
|
jswiki
|
||||||
plex
|
plex
|
||||||
portainer
|
portainer
|
||||||
rustdesk
|
rustdesk
|
||||||
speedtest
|
speedtest
|
||||||
vaultwarden
|
vaultwarden
|
||||||
nginx
|
nginx
|
||||||
)
|
)
|
||||||
|
|
||||||
# === TELEGRAM KONFIGURACE ===
|
# === TELEGRAM KONFIGURACE ===
|
||||||
if [[ -f "$CONFIG_FILE" ]]; then
|
if [[ -f "$CONFIG_FILE" ]]; then
|
||||||
# shellcheck disable=SC1090
|
# shellcheck disable=SC1090
|
||||||
source "$CONFIG_FILE"
|
source "$CONFIG_FILE"
|
||||||
fi
|
fi
|
||||||
TELEGRAM_BOT_TOKEN="${TELEGRAM_BOT_TOKEN:-}"
|
TELEGRAM_BOT_TOKEN="${TELEGRAM_BOT_TOKEN:-}"
|
||||||
TELEGRAM_CHAT_ID="${TELEGRAM_CHAT_ID:-}"
|
TELEGRAM_CHAT_ID="${TELEGRAM_CHAT_ID:-}"
|
||||||
|
|
||||||
# === TELEGRAM HELPER ===
|
# === TELEGRAM HELPER ===
|
||||||
send_msg() {
|
send_msg() {
|
||||||
local TEXT="$1"
|
local TEXT="$1"
|
||||||
|
|
||||||
if [[ -z "$TELEGRAM_BOT_TOKEN" || -z "$TELEGRAM_CHAT_ID" ]]; then
|
if [[ -z "$TELEGRAM_BOT_TOKEN" || -z "$TELEGRAM_CHAT_ID" ]]; then
|
||||||
echo "$DATUM ⚠️ Telegram neni nakonfigurovan, preskakuji" >> "$LOG"
|
echo "$DATUM ️ Telegram neni nakonfigurovan, preskakuji" >> "$LOG"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
|
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
|
||||||
-d chat_id="${TELEGRAM_CHAT_ID}" \
|
-d chat_id="${TELEGRAM_CHAT_ID}" \
|
||||||
-d text="$TEXT" \
|
-d text="$TEXT" \
|
||||||
-d parse_mode="Markdown" \
|
-d parse_mode="Markdown" \
|
||||||
--max-time 10 \
|
--max-time 10 \
|
||||||
--retry 3 > /dev/null || echo "$DATUM ⚠️ Telegram chyba" >> "$LOG"
|
--retry 3 > /dev/null || echo "$DATUM ️ Telegram chyba" >> "$LOG"
|
||||||
}
|
}
|
||||||
|
|
||||||
# === HLAVNI LOGIKA ===
|
# === HLAVNI LOGIKA ===
|
||||||
echo "$DATUM === docker-update.sh spusten ===" >> "$LOG"
|
echo "$DATUM === docker-update.sh spusten ===" >> "$LOG"
|
||||||
send_msg "🔄 *[$HOST]* Spoustim aktualizaci Docker kontejneru..."
|
send_msg " *[$HOST]* Spoustim aktualizaci Docker kontejneru..."
|
||||||
|
|
||||||
# Vytvor log adresar pokud neexistuje
|
# Vytvor log adresar pokud neexistuje
|
||||||
mkdir -p "$(dirname "$LOG")"
|
mkdir -p "$(dirname "$LOG")"
|
||||||
@@ -72,36 +72,36 @@ AKTUALIZOVANO=()
|
|||||||
CHYBY=()
|
CHYBY=()
|
||||||
|
|
||||||
for SLUZBA in "${AKTUALIZOVAT[@]}"; do
|
for SLUZBA in "${AKTUALIZOVAT[@]}"; do
|
||||||
SLUZBA_PATH="$ZAKLADNI_SLOZKA/$SLUZBA"
|
SLUZBA_PATH="$ZAKLADNI_SLOZKA/$SLUZBA"
|
||||||
|
|
||||||
if [[ ! -d "$SLUZBA_PATH" ]]; then
|
if [[ ! -d "$SLUZBA_PATH" ]]; then
|
||||||
echo "$DATUM SKIP: $SLUZBA (slozka neexistuje)" >> "$LOG"
|
echo "$DATUM SKIP: $SLUZBA (slozka neexistuje)" >> "$LOG"
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ! -f "$SLUZBA_PATH/docker-compose.yml" ]]; then
|
if [[ ! -f "$SLUZBA_PATH/docker-compose.yml" ]]; then
|
||||||
echo "$DATUM SKIP: $SLUZBA (docker-compose.yml chybi)" >> "$LOG"
|
echo "$DATUM SKIP: $SLUZBA (docker-compose.yml chybi)" >> "$LOG"
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "$DATUM === Aktualizuji: $SLUZBA ===" >> "$LOG"
|
echo "$DATUM === Aktualizuji: $SLUZBA ===" >> "$LOG"
|
||||||
|
|
||||||
cd "$SLUZBA_PATH"
|
cd "$SLUZBA_PATH"
|
||||||
|
|
||||||
# Stahnout nove image
|
# Stahnout nove image
|
||||||
if docker compose pull 2>>"$LOG"; then
|
if docker compose pull 2>>"$LOG"; then
|
||||||
# Restart s novym image
|
# Restart s novym image
|
||||||
if docker compose up -d 2>>"$LOG"; then
|
if docker compose up -d 2>>"$LOG"; then
|
||||||
AKTUALIZOVANO+=("$SLUZBA")
|
AKTUALIZOVANO+=("$SLUZBA")
|
||||||
echo "$DATUM OK: $SLUZBA aktualizovan" >> "$LOG"
|
echo "$DATUM OK: $SLUZBA aktualizovan" >> "$LOG"
|
||||||
else
|
else
|
||||||
CHYBY+=("$SLUZBA (up)")
|
CHYBY+=("$SLUZBA (up)")
|
||||||
echo "$DATUM CHYBA: $SLUZBA - up -d selhalo" >> "$LOG"
|
echo "$DATUM CHYBA: $SLUZBA - up -d selhalo" >> "$LOG"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
CHYBY+=("$SLUZBA (pull)")
|
CHYBY+=("$SLUZBA (pull)")
|
||||||
echo "$DATUM CHYBA: $SLUZBA - pull selhalo" >> "$LOG"
|
echo "$DATUM CHYBA: $SLUZBA - pull selhalo" >> "$LOG"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# === SOUHRN ===
|
# === SOUHRN ===
|
||||||
@@ -109,11 +109,11 @@ POCET_OK=${#AKTUALIZOVANO[@]}
|
|||||||
POCET_CHYB=${#CHYBY[@]}
|
POCET_CHYB=${#CHYBY[@]}
|
||||||
|
|
||||||
if [[ $POCET_CHYB -eq 0 ]]; then
|
if [[ $POCET_CHYB -eq 0 ]]; then
|
||||||
send_msg "✅ *[$HOST]* Docker aktualizace dokoncena.
|
send_msg " *[$HOST]* Docker aktualizace dokoncena.
|
||||||
Aktualizovano: $POCET_OK sluzeb
|
Aktualizovano: $POCET_OK sluzeb
|
||||||
Seznam: ${AKTUALIZOVANO[*]}"
|
Seznam: ${AKTUALIZOVANO[*]}"
|
||||||
else
|
else
|
||||||
send_msg "⚠️ *[$HOST]* Docker aktualizace dokoncena s chybami.
|
send_msg "️ *[$HOST]* Docker aktualizace dokoncena s chybami.
|
||||||
Aktualizovano: $POCET_OK
|
Aktualizovano: $POCET_OK
|
||||||
Chyby: ${CHYBY[*]}"
|
Chyby: ${CHYBY[*]}"
|
||||||
fi
|
fi
|
||||||
|
|||||||
+41
-41
@@ -22,18 +22,18 @@ CONFIG_FILE="$WORK_DIR/.telegram.conf"
|
|||||||
|
|
||||||
# Seznam sluzeb k zalohovani (uprav podle potreby)
|
# Seznam sluzeb k zalohovani (uprav podle potreby)
|
||||||
APP_DIRS=(
|
APP_DIRS=(
|
||||||
audiobookshelf
|
audiobookshelf
|
||||||
calibre-web
|
calibre-web
|
||||||
flatnotes
|
flatnotes
|
||||||
homeassistant
|
homeassistant
|
||||||
jswiki
|
jswiki
|
||||||
miniflux
|
miniflux
|
||||||
nginx
|
nginx
|
||||||
plex
|
plex
|
||||||
speedtest
|
speedtest
|
||||||
vaultwarden
|
vaultwarden
|
||||||
wiki
|
wiki
|
||||||
glance
|
glance
|
||||||
)
|
)
|
||||||
|
|
||||||
DATE_DIR=$(date +"%Y%m%d")
|
DATE_DIR=$(date +"%Y%m%d")
|
||||||
@@ -42,27 +42,27 @@ HOST=$(hostname)
|
|||||||
|
|
||||||
# === TELEGRAM KONFIGURACE ===
|
# === TELEGRAM KONFIGURACE ===
|
||||||
if [[ -f "$CONFIG_FILE" ]]; then
|
if [[ -f "$CONFIG_FILE" ]]; then
|
||||||
# shellcheck disable=SC1090
|
# shellcheck disable=SC1090
|
||||||
source "$CONFIG_FILE"
|
source "$CONFIG_FILE"
|
||||||
fi
|
fi
|
||||||
TELEGRAM_BOT_TOKEN="${TELEGRAM_BOT_TOKEN:-}"
|
TELEGRAM_BOT_TOKEN="${TELEGRAM_BOT_TOKEN:-}"
|
||||||
TELEGRAM_CHAT_ID="${TELEGRAM_CHAT_ID:-}"
|
TELEGRAM_CHAT_ID="${TELEGRAM_CHAT_ID:-}"
|
||||||
|
|
||||||
# === TELEGRAM HELPER ===
|
# === TELEGRAM HELPER ===
|
||||||
send_msg() {
|
send_msg() {
|
||||||
local TEXT="$1"
|
local TEXT="$1"
|
||||||
|
|
||||||
if [[ -z "$TELEGRAM_BOT_TOKEN" || -z "$TELEGRAM_CHAT_ID" ]]; then
|
if [[ -z "$TELEGRAM_BOT_TOKEN" || -z "$TELEGRAM_CHAT_ID" ]]; then
|
||||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Telegram neni nakonfigurovan, preskakuji" >> "$LOG_FILE"
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Telegram neni nakonfigurovan, preskakuji" >> "$LOG_FILE"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
|
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
|
||||||
-d chat_id="${TELEGRAM_CHAT_ID}" \
|
-d chat_id="${TELEGRAM_CHAT_ID}" \
|
||||||
-d text="$TEXT" \
|
-d text="$TEXT" \
|
||||||
-d parse_mode="Markdown" \
|
-d parse_mode="Markdown" \
|
||||||
--max-time 10 \
|
--max-time 10 \
|
||||||
--retry 3 > /dev/null || echo "[$(date '+%Y-%m-%d %H:%M:%S')] ⚠️ Telegram chyba" >> "$LOG_FILE"
|
--retry 3 > /dev/null || echo "[$(date '+%Y-%m-%d %H:%M:%S')] ️ Telegram chyba" >> "$LOG_FILE"
|
||||||
}
|
}
|
||||||
|
|
||||||
# === HLAVNI LOGIKA ===
|
# === HLAVNI LOGIKA ===
|
||||||
@@ -73,34 +73,34 @@ ZALOHOVANO=()
|
|||||||
CHYBY=()
|
CHYBY=()
|
||||||
|
|
||||||
for APP in "${APP_DIRS[@]}"; do
|
for APP in "${APP_DIRS[@]}"; do
|
||||||
APP_PATH="$SOURCE_DIR/$APP"
|
APP_PATH="$SOURCE_DIR/$APP"
|
||||||
if [[ ! -d "$APP_PATH" ]]; then
|
if [[ ! -d "$APP_PATH" ]]; then
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cd "$APP_PATH"
|
cd "$APP_PATH"
|
||||||
|
|
||||||
# Pokud existuje data/ adresar, zalohuj ho
|
# Pokud existuje data/ adresar, zalohuj ho
|
||||||
if [[ -d "./data" ]]; then
|
if [[ -d "./data" ]]; then
|
||||||
BACKUP_FILE="$BACKUP_DIR/$DATE_DIR/${APP}-${TIMESTAMP}.tar.zst"
|
BACKUP_FILE="$BACKUP_DIR/$DATE_DIR/${APP}-${TIMESTAMP}.tar.zst"
|
||||||
|
|
||||||
if tar --zstd -cf "$BACKUP_FILE" -C "$APP_PATH" data 2>>"$LOG_FILE"; then
|
if tar --zstd -cf "$BACKUP_FILE" -C "$APP_PATH" data 2>>"$LOG_FILE"; then
|
||||||
ZALOHOVANO+=("$APP ($(du -h "$BACKUP_FILE" | cut -f1))")
|
ZALOHOVANO+=("$APP ($(du -h "$BACKUP_FILE" | cut -f1))")
|
||||||
else
|
else
|
||||||
CHYBY+=("$APP")
|
CHYBY+=("$APP")
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
END_TIME=$(date +%s)
|
END_TIME=$(date +%s)
|
||||||
DURATION=$((END_TIME - START_TIME))
|
DURATION=$((END_TIME - START_TIME))
|
||||||
|
|
||||||
if [[ ${#CHYBY[@]} -eq 0 ]]; then
|
if [[ ${#CHYBY[@]} -eq 0 ]]; then
|
||||||
send_msg "✅ *[$HOST]* Docker zalohy dokonceny (${DURATION}s).
|
send_msg " *[$HOST]* Docker zalohy dokonceny (${DURATION}s).
|
||||||
Zalohovano: ${#ZALOHOVANO[@]} sluzeb
|
Zalohovano: ${#ZALOHOVANO[@]} sluzeb
|
||||||
Adresar: \`$BACKUP_DIR/$DATE_DIR\`"
|
Adresar: \`$BACKUP_DIR/$DATE_DIR\`"
|
||||||
else
|
else
|
||||||
send_msg "⚠️ *[$HOST]* Docker zalohy dokonceny s chybami.
|
send_msg "️ *[$HOST]* Docker zalohy dokonceny s chybami.
|
||||||
Zalohovano: ${#ZALOHOVANO[@]}
|
Zalohovano: ${#ZALOHOVANO[@]}
|
||||||
Chyby: ${CHYBY[*]}"
|
Chyby: ${CHYBY[*]}"
|
||||||
fi
|
fi
|
||||||
|
|||||||
+38
-38
@@ -20,7 +20,7 @@ DOCKER_ROOT="$WORK_DIR/docker"
|
|||||||
DOCKER_UPDATE_LOG="$WORK_DIR/skripty/update-docker-script/docker-update.log"
|
DOCKER_UPDATE_LOG="$WORK_DIR/skripty/update-docker-script/docker-update.log"
|
||||||
DOCKER_BACKUP_DIR="$WORK_DIR/zalohy/docker"
|
DOCKER_BACKUP_DIR="$WORK_DIR/zalohy/docker"
|
||||||
HOST=$(hostname)
|
HOST=$(hostname)
|
||||||
INTERFACE="eth0" # nastav podle sveho serveru
|
INTERFACE="eth0" # nastav podle sveho serveru
|
||||||
|
|
||||||
# Prahy pro upozorneni
|
# Prahy pro upozorneni
|
||||||
DISK_WARN=80
|
DISK_WARN=80
|
||||||
@@ -30,26 +30,26 @@ TEMP_CRIT=80
|
|||||||
|
|
||||||
# === TELEGRAM KONFIGURACE ===
|
# === TELEGRAM KONFIGURACE ===
|
||||||
if [[ -f "$CONFIG_FILE" ]]; then
|
if [[ -f "$CONFIG_FILE" ]]; then
|
||||||
# shellcheck disable=SC1090
|
# shellcheck disable=SC1090
|
||||||
source "$CONFIG_FILE"
|
source "$CONFIG_FILE"
|
||||||
fi
|
fi
|
||||||
TELEGRAM_BOT_TOKEN="${TELEGRAM_BOT_TOKEN:-}"
|
TELEGRAM_BOT_TOKEN="${TELEGRAM_BOT_TOKEN:-}"
|
||||||
TELEGRAM_CHAT_ID="${TELEGRAM_CHAT_ID:-}"
|
TELEGRAM_CHAT_ID="${TELEGRAM_CHAT_ID:-}"
|
||||||
|
|
||||||
send_msg() {
|
send_msg() {
|
||||||
local TEXT="$1"
|
local TEXT="$1"
|
||||||
|
|
||||||
if [[ -z "$TELEGRAM_BOT_TOKEN" || -z "$TELEGRAM_CHAT_ID" ]]; then
|
if [[ -z "$TELEGRAM_BOT_TOKEN" || -z "$TELEGRAM_CHAT_ID" ]]; then
|
||||||
echo "Telegram neni nakonfigurovan, preskakuji"
|
echo "Telegram neni nakonfigurovan, preskakuji"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
|
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
|
||||||
-d chat_id="${TELEGRAM_CHAT_ID}" \
|
-d chat_id="${TELEGRAM_CHAT_ID}" \
|
||||||
-d text="$TEXT" \
|
-d text="$TEXT" \
|
||||||
-d parse_mode="Markdown" \
|
-d parse_mode="Markdown" \
|
||||||
--max-time 10 \
|
--max-time 10 \
|
||||||
--retry 3 > /dev/null || echo "⚠️ Telegram chyba"
|
--retry 3 > /dev/null || echo "️ Telegram chyba"
|
||||||
}
|
}
|
||||||
|
|
||||||
# === SYSTEMOVE STATISTIKY ===
|
# === SYSTEMOVE STATISTIKY ===
|
||||||
@@ -64,12 +64,12 @@ DISK_PERCENT_RAW=$(df -P / | awk 'NR==2 {print $5}' | tr -d '%')
|
|||||||
# CPU teplota (pokud je k dispozici)
|
# CPU teplota (pokud je k dispozici)
|
||||||
TEMP_RAW=""
|
TEMP_RAW=""
|
||||||
if [[ -f /sys/class/thermal/thermal_zone0/temp ]]; then
|
if [[ -f /sys/class/thermal/thermal_zone0/temp ]]; then
|
||||||
TEMP_RAW=$(cat /sys/class/thermal/thermal_zone0/temp 2>/dev/null || echo "")
|
TEMP_RAW=$(cat /sys/class/thermal/thermal_zone0/temp 2>/dev/null || echo "")
|
||||||
fi
|
fi
|
||||||
TEMP_HUMAN=""
|
TEMP_HUMAN=""
|
||||||
if [[ -n "$TEMP_RAW" && "$TEMP_RAW" -gt 0 ]]; then
|
if [[ -n "$TEMP_RAW" && "$TEMP_RAW" -gt 0 ]]; then
|
||||||
TEMP_C=$((TEMP_RAW / 1000))
|
TEMP_C=$((TEMP_RAW / 1000))
|
||||||
TEMP_HUMAN="🌡️ CPU: ${TEMP_C}°C\n"
|
TEMP_HUMAN="️ CPU: ${TEMP_C}°C\n"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Docker kontejnery
|
# Docker kontejnery
|
||||||
@@ -86,47 +86,47 @@ NETWORK_TX_HUMAN=$(awk "BEGIN {printf \"%.2f GB\", $NETWORK_TX/1073741824}")
|
|||||||
# Posledni Docker update a zaloha
|
# Posledni Docker update a zaloha
|
||||||
LAST_UPDATE="zatim neprobehla"
|
LAST_UPDATE="zatim neprobehla"
|
||||||
if [[ -f "$DOCKER_UPDATE_LOG" ]]; then
|
if [[ -f "$DOCKER_UPDATE_LOG" ]]; then
|
||||||
LAST_UPDATE=$(grep -E "=== (docker-update|update.sh) (spusten|dokoncen)" "$DOCKER_UPDATE_LOG" | tail -1 | awk '{print $1, $2}')
|
LAST_UPDATE=$(grep -E "=== (docker-update|update.sh) (spusten|dokoncen)" "$DOCKER_UPDATE_LOG" | tail -1 | awk '{print $1, $2}')
|
||||||
fi
|
fi
|
||||||
|
|
||||||
LAST_BACKUP="zatim neprobehla"
|
LAST_BACKUP="zatim neprobehla"
|
||||||
if [[ -d "$DOCKER_BACKUP_DIR" ]]; then
|
if [[ -d "$DOCKER_BACKUP_DIR" ]]; then
|
||||||
LAST_BACKUP=$(ls -t "$DOCKER_BACKUP_DIR"/*/ 2>/dev/null | head -1 | xargs -I {} basename {} 2>/dev/null || echo "neni")
|
LAST_BACKUP=$(ls -t "$DOCKER_BACKUP_DIR"/*/ 2>/dev/null | head -1 | xargs -I {} basename {} 2>/dev/null || echo "neni")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# === SESTAVENI REPORTU ===
|
# === SESTAVENI REPORTU ===
|
||||||
ALERTS=""
|
ALERTS=""
|
||||||
if [[ $DISK_PERCENT_RAW -ge $DISK_CRIT ]]; then
|
if [[ $DISK_PERCENT_RAW -ge $DISK_CRIT ]]; then
|
||||||
ALERTS="${ALERTS}🚨 *DISK KRITICKY: ${DISK_PERCENT_RAW}%*\n"
|
ALERTS="${ALERTS} *DISK KRITICKY: ${DISK_PERCENT_RAW}%*\n"
|
||||||
elif [[ $DISK_PERCENT_RAW -ge $DISK_WARN ]]; then
|
elif [[ $DISK_PERCENT_RAW -ge $DISK_WARN ]]; then
|
||||||
ALERTS="${ALERTS}⚠️ *DISK: ${DISK_PERCENT_RAW}%*\n"
|
ALERTS="${ALERTS}️ *DISK: ${DISK_PERCENT_RAW}%*\n"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -n "$TEMP_RAW" && "$TEMP_RAW" -gt 0 ]]; then
|
if [[ -n "$TEMP_RAW" && "$TEMP_RAW" -gt 0 ]]; then
|
||||||
TEMP_C=$((TEMP_RAW / 1000))
|
TEMP_C=$((TEMP_RAW / 1000))
|
||||||
if [[ $TEMP_C -ge $TEMP_CRIT ]]; then
|
if [[ $TEMP_C -ge $TEMP_CRIT ]]; then
|
||||||
ALERTS="${ALERTS}🚨 *CPU KRITICKY: ${TEMP_C}°C*\n"
|
ALERTS="${ALERTS} *CPU KRITICKY: ${TEMP_C}°C*\n"
|
||||||
elif [[ $TEMP_C -ge $TEMP_WARN ]]; then
|
elif [[ $TEMP_C -ge $TEMP_WARN ]]; then
|
||||||
ALERTS="${ALERTS}⚠️ *CPU: ${TEMP_C}°C*\n"
|
ALERTS="${ALERTS}️ *CPU: ${TEMP_C}°C*\n"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# === ODESLANI ===
|
# === ODESLANI ===
|
||||||
REPORT="${ALERTS}📊 *[$HOST]* Denni report
|
REPORT="${ALERTS} *[$HOST]* Denni report
|
||||||
|
|
||||||
⏱️ Uptime: \`$UPTIME\`
|
⏱️ Uptime: \`$UPTIME\`
|
||||||
📈 Load: \`$LOAD\`
|
Load: \`$LOAD\`
|
||||||
🧠 RAM: $RAM_USED / $RAM_TOTAL
|
RAM: $RAM_USED / $RAM_TOTAL
|
||||||
💾 Disk: $DISK_USED_HUMAN / $DISK_TOTAL_HUMAN (${DISK_PERCENT_RAW}%)
|
Disk: $DISK_USED_HUMAN / $DISK_TOTAL_HUMAN (${DISK_PERCENT_RAW}%)
|
||||||
${TEMP_HUMAN}🌐 Sit ($INTERFACE):
|
${TEMP_HUMAN} Sit ($INTERFACE):
|
||||||
RX: $NETWORK_RX_HUMAN | TX: $NETWORK_TX_HUMAN
|
RX: $NETWORK_RX_HUMAN | TX: $NETWORK_TX_HUMAN
|
||||||
|
|
||||||
🐳 Docker:
|
Docker:
|
||||||
Bezi: $CONTAINERS_RUNNING | Celkem: $CONTAINERS_TOTAL
|
Bezi: $CONTAINERS_RUNNING | Celkem: $CONTAINERS_TOTAL
|
||||||
Stopped: $CONTAINERS_STOPPED
|
Stopped: $CONTAINERS_STOPPED
|
||||||
|
|
||||||
📅 Posledni Docker update: \`$LAST_UPDATE\`
|
Posledni Docker update: \`$LAST_UPDATE\`
|
||||||
💾 Posledni zaloha: \`$LAST_BACKUP\`"
|
Posledni zaloha: \`$LAST_BACKUP\`"
|
||||||
|
|
||||||
send_msg "$REPORT"
|
send_msg "$REPORT"
|
||||||
exit 0
|
exit 0
|
||||||
|
|||||||
+25
-25
@@ -21,27 +21,27 @@ RESTART_REQUIRED="/var/run/reboot-required"
|
|||||||
|
|
||||||
# === TELEGRAM KONFIGURACE ===
|
# === TELEGRAM KONFIGURACE ===
|
||||||
if [[ -f "$CONFIG_FILE" ]]; then
|
if [[ -f "$CONFIG_FILE" ]]; then
|
||||||
# shellcheck disable=SC1090
|
# shellcheck disable=SC1090
|
||||||
source "$CONFIG_FILE"
|
source "$CONFIG_FILE"
|
||||||
fi
|
fi
|
||||||
TELEGRAM_BOT_TOKEN="${TELEGRAM_BOT_TOKEN:-}"
|
TELEGRAM_BOT_TOKEN="${TELEGRAM_BOT_TOKEN:-}"
|
||||||
TELEGRAM_CHAT_ID="${TELEGRAM_CHAT_ID:-}"
|
TELEGRAM_CHAT_ID="${TELEGRAM_CHAT_ID:-}"
|
||||||
|
|
||||||
# === TELEGRAM HELPER ===
|
# === TELEGRAM HELPER ===
|
||||||
send_msg() {
|
send_msg() {
|
||||||
local TEXT="$1"
|
local TEXT="$1"
|
||||||
|
|
||||||
if [[ -z "$TELEGRAM_BOT_TOKEN" || -z "$TELEGRAM_CHAT_ID" ]]; then
|
if [[ -z "$TELEGRAM_BOT_TOKEN" || -z "$TELEGRAM_CHAT_ID" ]]; then
|
||||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Telegram neni nakonfigurovan, preskakuji notifikaci" >> "$LOG_FILE"
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Telegram neni nakonfigurovan, preskakuji notifikaci" >> "$LOG_FILE"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
|
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
|
||||||
-d chat_id="${TELEGRAM_CHAT_ID}" \
|
-d chat_id="${TELEGRAM_CHAT_ID}" \
|
||||||
-d text="$TEXT" \
|
-d text="$TEXT" \
|
||||||
-d parse_mode="Markdown" \
|
-d parse_mode="Markdown" \
|
||||||
--max-time 10 \
|
--max-time 10 \
|
||||||
--retry 3 > /dev/null || echo "[$(date '+%Y-%m-%d %H:%M:%S')] ⚠️ Telegram chyba" >> "$LOG_FILE"
|
--retry 3 > /dev/null || echo "[$(date '+%Y-%m-%d %H:%M:%S')] ️ Telegram chyba" >> "$LOG_FILE"
|
||||||
}
|
}
|
||||||
|
|
||||||
# === PROMENNE ===
|
# === PROMENNE ===
|
||||||
@@ -49,14 +49,14 @@ START_TIME=$(date +%s)
|
|||||||
|
|
||||||
# === CHYBA HANDLER ===
|
# === CHYBA HANDLER ===
|
||||||
on_error() {
|
on_error() {
|
||||||
local exit_code=$?
|
local exit_code=$?
|
||||||
local end_time=$(date +%s)
|
local end_time=$(date +%s)
|
||||||
local duration=$((end_time - START_TIME))
|
local duration=$((end_time - START_TIME))
|
||||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] CHYBA: update.sh skončil s chybou (exit code $exit_code)" >> "$LOG_FILE"
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] CHYBA: update.sh skončil s chybou (exit code $exit_code)" >> "$LOG_FILE"
|
||||||
send_msg "❌ *[$HOST]* Aktualizace systému selhala (${duration}s).
|
send_msg " *[$HOST]* Aktualizace systému selhala (${duration}s).
|
||||||
Zkontroluj log:
|
Zkontroluj log:
|
||||||
\`$LOG_FILE\`"
|
\`$LOG_FILE\`"
|
||||||
exit "$exit_code"
|
exit "$exit_code"
|
||||||
}
|
}
|
||||||
trap on_error ERR
|
trap on_error ERR
|
||||||
|
|
||||||
@@ -64,7 +64,7 @@ trap on_error ERR
|
|||||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] === update.sh spusten ===" >> "$LOG_FILE"
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] === update.sh spusten ===" >> "$LOG_FILE"
|
||||||
|
|
||||||
# Notifikace o zacatku
|
# Notifikace o zacatku
|
||||||
send_msg "🔄 *[$HOST]* Spoustim aktualizaci systemu..."
|
send_msg " *[$HOST]* Spoustim aktualizaci systemu..."
|
||||||
|
|
||||||
# Aktualizace baliku
|
# Aktualizace baliku
|
||||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] apt update..." >> "$LOG_FILE"
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] apt update..." >> "$LOG_FILE"
|
||||||
@@ -81,14 +81,14 @@ DURATION=$((END_TIME - START_TIME))
|
|||||||
|
|
||||||
# Restart?
|
# Restart?
|
||||||
if [[ -f "$RESTART_REQUIRED" ]]; then
|
if [[ -f "$RESTART_REQUIRED" ]]; then
|
||||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Restart required" >> "$LOG_FILE"
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Restart required" >> "$LOG_FILE"
|
||||||
send_msg "⚠️ *[$HOST]* Aktualizace systemu dokoncena (${DURATION}s).
|
send_msg "️ *[$HOST]* Aktualizace systemu dokoncena (${DURATION}s).
|
||||||
**Restart serveru je nutny!** Reboot bude proveden za 1 minutu."
|
**Restart serveru je nutny!** Reboot bude proveden za 1 minutu."
|
||||||
|
|
||||||
# Naplanovany restart za 1 minutu (at muzes kanclovat)
|
# Naplanovany restart za 1 minutu (at muzes kanclovat)
|
||||||
sudo shutdown -r +1 "Systemovy restart po update"
|
sudo shutdown -r +1 "Systemovy restart po update"
|
||||||
else
|
else
|
||||||
send_msg "✅ *[$HOST]* Aktualizace systemu dokoncena (${DURATION}s).
|
send_msg " *[$HOST]* Aktualizace systemu dokoncena (${DURATION}s).
|
||||||
Restart nutny neni."
|
Restart nutny neni."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user