#!/bin/bash # # update.sh - aktualizace systemu (apt update + upgrade) + restart pokud nutny # + Telegram notifikace o vysledku. # # Spust jednou rucne: sudo bash update.sh # Spust automaticky: systemd timer update-rpi.timer (kazdy patek 18:00) # # Konfigurace: /home/mates/.telegram.conf (nebo nastav TELEGRAM_BOT_TOKEN a TELEGRAM_CHAT_ID v env) # set -euo pipefail # === KONFIGURACE === CONFIG_FILE="/home/mates/.telegram.conf" USER_NAME="mates" WORK_DIR="/home/$USER_NAME" LOG_FILE="$WORK_DIR/update.log" HOST=$(hostname) RESTART_REQUIRED="/var/run/reboot-required" # === TELEGRAM KONFIGURACE === if [[ -f "$CONFIG_FILE" ]]; then # 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" 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" } # === PROMENNE === 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). Zkontroluj log: \`$LOG_FILE\`" exit "$exit_code" } trap on_error ERR # === HLAVNI LOGIKA === echo "[$(date '+%Y-%m-%d %H:%M:%S')] === update.sh spusten ===" >> "$LOG_FILE" # Notifikace o zacatku send_msg " *[$HOST]* Spoustim aktualizaci systemu..." # Aktualizace baliku echo "[$(date '+%Y-%m-%d %H:%M:%S')] apt update..." >> "$LOG_FILE" sudo apt-get update -qq 2>>"$LOG_FILE" echo "[$(date '+%Y-%m-%d %H:%M:%S')] apt upgrade..." >> "$LOG_FILE" sudo apt-get upgrade -y -qq 2>>"$LOG_FILE" echo "[$(date '+%Y-%m-%d %H:%M:%S')] apt autoremove..." >> "$LOG_FILE" sudo apt-get autoremove -y -qq 2>>"$LOG_FILE" END_TIME=$(date +%s) 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). **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" else send_msg " *[$HOST]* Aktualizace systemu dokoncena (${DURATION}s). Restart nutny neni." fi echo "[$(date '+%Y-%m-%d %H:%M:%S')] === update.sh dokoncen (${DURATION}s) ===" >> "$LOG_FILE" exit 0