From 5d3bb91440a975a0ec2158fa50d4a3ffd967d46a Mon Sep 17 00:00:00 2001 From: kai Date: Tue, 21 Apr 2026 14:24:08 +0000 Subject: [PATCH] fix: improve logging + docker handling --- scripts/update.sh | 108 ++++++++++++++++------------------------------ 1 file changed, 38 insertions(+), 70 deletions(-) diff --git a/scripts/update.sh b/scripts/update.sh index e0bab30..f63cd07 100755 --- a/scripts/update.sh +++ b/scripts/update.sh @@ -4,49 +4,31 @@ set -Eeuo pipefail HOST="$(hostname)" LOG="/opt/pingu/logs/update.log" -TELEGRAM_TOKEN="${TELEGRAM_TOKEN:-8101319618:AAHboFVVgmLPccJB0MDr_R2g0K90hkGqkRw}" -TELEGRAM_CHAT_ID="${TELEGRAM_CHAT_ID:-581059353}" +TELEGRAM_TOKEN="${TELEGRAM_TOKEN:-}" +TELEGRAM_CHAT_ID="${TELEGRAM_CHAT_ID:-}" REBOOT=0 DOCKER_UPDATES=0 DOCKER_UPDATE_LIST="" log() { - local msg="$1" - echo "[$(date '+%F %T')] $msg" | tee -a "$LOG" + echo "[$(date '+%F %T')] $1" | tee -a "$LOG" } send_telegram() { local text="$1" - local http_code - http_code="$(curl -sS --show-error \ - -o /tmp/pingu-telegram-response.txt \ - -w '%{http_code}' \ - -X POST "https://api.telegram.org/bot${TELEGRAM_TOKEN}/sendMessage" \ + curl -sS -X POST "https://api.telegram.org/bot${TELEGRAM_TOKEN}/sendMessage" \ --data-urlencode "chat_id=${TELEGRAM_CHAT_ID}" \ - --data-urlencode "text=${text}")" - - cat /tmp/pingu-telegram-response.txt >> "$LOG" - echo >> "$LOG" - - if [ "$http_code" -ne 200 ]; then - log "Telegram-API Fehler, HTTP ${http_code}" - return 1 - fi + --data-urlencode "text=${text}" \ + >> "$LOG" 2>&1 || true } cleanup_on_error() { local exit_code=$? - local line_no="${1:-unknown}" - - log "FEHLER in Zeile ${line_no}, Exit-Code ${exit_code}" - - curl -sS -X POST "https://api.telegram.org/bot${TELEGRAM_TOKEN}/sendMessage" \ - --data-urlencode "chat_id=${TELEGRAM_CHAT_ID}" \ - --data-urlencode "text=❌ ${HOST}: Update-Script fehlgeschlagen in Zeile ${line_no} (Exit ${exit_code})." \ - >> "$LOG" 2>&1 || true + log "❌ Fehler in Zeile ${1:-unknown} (Exit ${exit_code})" + send_telegram "❌ ${HOST}: Update fehlgeschlagen (Zeile ${1:-?}, Exit ${exit_code})" exit "$exit_code" } @@ -54,95 +36,81 @@ trap 'cleanup_on_error ${LINENO}' ERR check_docker_updates() { if ! command -v docker >/dev/null 2>&1; then - log "Docker nicht installiert - überspringe Container-Prüfung" - return 0 + log "Docker nicht installiert" + return fi if ! docker info >/dev/null 2>&1; then - log "Docker-Daemon nicht erreichbar - überspringe Container-Prüfung" - return 0 + log "Docker Daemon nicht erreichbar" + return fi - local container_ids - mapfile -t container_ids < <(docker ps -q) + local containers + mapfile -t containers < <(docker ps -q) - if [ "${#container_ids[@]}" -eq 0 ]; then - log "Keine laufenden Docker-Container gefunden" - return 0 - fi + log "Prüfe ${#containers[@]} Container" - log "Prüfe ${#container_ids[@]} laufende Docker-Container auf Image-Updates" + for cid in "${containers[@]}"; do + local name image running_id latest_id - local cid name image running_id latest_id pull_output - for cid in "${container_ids[@]}"; do name="$(docker inspect --format '{{.Name}}' "$cid" | sed 's#^/##')" image="$(docker inspect --format '{{.Config.Image}}' "$cid")" running_id="$(docker inspect --format '{{.Image}}' "$cid")" - log "Prüfe Container ${name} mit Image ${image}" + docker pull "$image" >/dev/null 2>&1 || continue + latest_id="$(docker image inspect --format '{{.Id}}' "$image" 2>/dev/null || true)" - if pull_output="$(docker pull "$image" 2>&1)"; then - latest_id="$(docker image inspect --format '{{.Id}}' "$image")" - - if [ "$running_id" != "$latest_id" ]; then - DOCKER_UPDATES=$((DOCKER_UPDATES + 1)) - DOCKER_UPDATE_LIST+=$'\n'"🐳 ${name} (${image})" - log "Update verfügbar für ${name}" - else - log "Kein Update für ${name}" - fi - else - log "Konnte Image ${image} für ${name} nicht prüfen: ${pull_output}" + if [[ -n "$latest_id" && "$running_id" != "$latest_id" ]]; then + DOCKER_UPDATES=$((DOCKER_UPDATES + 1)) + DOCKER_UPDATE_LIST+=$'\n'"🐳 $name ($image)" + log "Update verfügbar: $name" fi done } main() { + mkdir -p "$(dirname "$LOG")" touch "$LOG" - chmod 600 "$LOG" log "=== Update Start ${HOST} ===" export DEBIAN_FRONTEND=noninteractive - log "Starte apt-get update" - apt-get update >> "$LOG" 2>&1 + log "APT Update" + apt-get update 2>&1 | tee -a "$LOG" - log "Starte apt-get upgrade" - apt-get -y upgrade >> "$LOG" 2>&1 + log "APT Upgrade" + apt-get -y upgrade 2>&1 | tee -a "$LOG" if [ -f /var/run/reboot-required ]; then REBOOT=1 log "Reboot erforderlich" - else - log "Kein Reboot erforderlich" fi check_docker_updates - local msg="🐧 ${HOST}: Updates installiert." + local msg="🐧 ${HOST}: Update abgeschlossen" + if [ "$REBOOT" -eq 1 ]; then - msg="${msg} REBOOT erforderlich." + msg+="\n🔄 Reboot erforderlich" else - msg="${msg} Kein Reboot nötig." + msg+="\n✔ Kein Reboot nötig" fi if [ "$DOCKER_UPDATES" -gt 0 ]; then - msg+=$'\n\n'"🐳 Docker-Updates verfügbar: ${DOCKER_UPDATES}${DOCKER_UPDATE_LIST}" + msg+="\n\n🐳 Docker Updates:${DOCKER_UPDATE_LIST}" else - msg+=$'\n\n'"🐳 Docker-Container aktuell." + msg+="\n\n🐳 Docker aktuell" fi - log "Sende Telegram-Nachricht" + log "Sende Telegram" send_telegram "$msg" - log "$msg" - log "=== Update Ende ${HOST} ===" + log "=== Update Ende ===" if [ "$REBOOT" -eq 1 ]; then - log "System wird neu gestartet" reboot fi } -#test telegram -main "$@" + +main "$@" \ No newline at end of file