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