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:
2026-08-02 08:50:13 +02:00
parent fba29e5171
commit 1eede74dc6
5 changed files with 202 additions and 202 deletions
+46 -46
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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