Forráskód Böngészése

Create update-lxcs-cron.sh

tteckster 1 éve
szülő
commit
12dc7162a9
1 módosított fájl, 59 hozzáadás és 0 törlés
  1. 59 0
      misc/update-lxcs-cron.sh

+ 59 - 0
misc/update-lxcs-cron.sh

@@ -0,0 +1,59 @@
+#!/usr/bin/env bash
+
+# Copyright (c) 2021-2023 tteck
+# Author: tteck (tteckster)
+# License: MIT
+# https://github.com/tteck/Proxmox/raw/main/LICENSE
+
+echo "$(date)"
+excluded_containers=("$@")
+function update_container() {
+  container=$1
+  name=$(pct exec "$container" hostname)
+  os=$(pct config "$container" | awk '/^ostype/ {print $2}')
+  if [[ "$os" == "ubuntu" || "$os" == "debian" ]]; then
+    disk_info=$(pct exec "$container" df /boot | awk 'NR==2{gsub("%","",$5); printf "%s %.1fG %.1fG %.1fG", $5, $3/1024/1024, $2/1024/1024, $4/1024/1024 }')
+    read -ra disk_info_array <<< "$disk_info"
+    echo -e "\n[Info] Updating $container : $name - Boot Disk: ${disk_info_array[0]}% full [${disk_info_array[1]}/${disk_info_array[2]} used, ${disk_info_array[3]} free]"
+  else
+    echo -e "\n[Info] Updating $container : $name - [No disk info for ${os}]"
+  fi
+  case "$os" in
+    alpine)  pct exec "$container" -- ash -c "apk update && apk upgrade" ;;
+    archlinux)  pct exec "$container" -- bash -c "pacman -Syyu --noconfirm";;
+    fedora|rocky|centos|alma)  pct exec "$container" -- bash -c "dnf -y update && dnf -y upgrade" ;;
+    ubuntu|debian|devuan)  pct exec "$container" -- bash -c "apt-get update 2>/dev/null | grep 'packages.*upgraded'; apt list --upgradable && apt-get -y dist-upgrade" ;;
+  esac
+}
+
+for container in $(pct list | awk '{if(NR>1) print $1}'); do
+  excluded=false
+  for excluded_container in "${excluded_containers[@]}"; do
+    if [ "$container" == "$excluded_container" ]; then
+      excluded=true
+      break
+    fi
+  done
+  if [ "$excluded" == true ]; then
+    header_info
+    echo -e "[Info] Skipping $container"
+    sleep 1
+  else
+    status=$(pct status $container)
+    template=$(pct config $container | grep -q "template:" && echo "true" || echo "false")
+    if [ "$template" == "false" ] && [ "$status" == "status: stopped" ]; then
+      echo -e "[Info] Starting $container"
+      pct start $container
+      echo -e "[Info] Waiting For $container To Start"
+      sleep 5
+      update_container $container
+      echo -e "[Info] Shutting down $container"
+      pct shutdown $container &
+    elif [ "$status" == "status: running" ]; then
+      update_container $container
+    fi
+  fi
+done
+wait
+
+echo -e "Finished, All Containers Updated. \n"