Files
shell_proxmox_killguest/killguest.sh
2026-04-11 17:02:00 +02:00

135 lines
3.9 KiB
Bash

#!/bin/bash
ID="$1"
if [ -z "$ID" ]; then
echo "❌ Usage: killguest <vmid|ctid>"
exit 1
fi
echo "──────────────────────────────────────────────────────────"
echo "🔍 Virtuelle Maschine oder Container wird gesucht..."
echo "──────────────────────────────────────────────────────────"
# Typ bestimmen
if qm status "$ID" &>/dev/null; then
TYPE="vm"
elif pct status "$ID" &>/dev/null; then
TYPE="ct"
else
echo "❌ Keine VM oder LXC mit ID $ID gefunden."
exit 1
fi
# Name ermitteln
if [ "$TYPE" = "vm" ]; then
NAME=$(qm config "$ID" | grep "^name:" | awk '{print $2}')
elif [ "$TYPE" = "ct" ]; then
NAME=$(pct config "$ID" | grep "^hostname:" | awk '{print $2}')
fi
[ -z "$NAME" ] && NAME="unknown"
# Ausgabe
if [ "$TYPE" = "vm" ]; then
TYPE_LABEL="VM"
else
TYPE_LABEL="LXC"
fi
echo ""
echo "📦 Maschine gefunden:"
echo "♻️ Name: $NAME"
echo "⚙️ Typ: $TYPE_LABEL"
echo ""
########################################
# VM
########################################
if [ "$TYPE" = "vm" ]; then
PID=$(ps -eo pid,cmd | grep -E "/usr/bin/kvm.*-id $ID" | grep -v grep | awk '{print $1}')
if [ -z "$PID" ]; then
echo "❌ Kein QEMU Prozess gefunden. VM kann nicht beendet werden."
exit 1
fi
echo "📋 Gefundener Prozess:"
ps -fp $PID
echo ""
echo "──────────────────────────────────────────────────────────"
echo ""
read -p "💣 VM hart beenden? (y/N): " CONFIRM
[[ "$CONFIRM" =~ ^[Yy]$ ]] || exit 0
echo ""
echo "──────────────────────────────────────────────────────────"
echo ""
echo "🔥 Beende VM (PID $PID)..."
kill -9 $PID
sleep 1
if ps -p $PID > /dev/null 2>&1; then
echo "❌ Prozess lebt noch."
exit 1
else
echo "✅ VM wurde beendet."
fi
echo ""
echo "──────────────────────────────────────────────────────────"
echo ""
fi
########################################
# LXC
########################################
if [ "$TYPE" = "ct" ]; then
# cgroup Methode
PIDS=$(grep -l "lxc/$ID" /proc/*/cgroup 2>/dev/null | cut -d'/' -f3)
# fallback für andere layouts
if [ -z "$PIDS" ]; then
PIDS=$(ps -eo pid,cmd | grep "lxc-start.*$ID" | grep -v grep | awk '{print $1}')
fi
if [ -z "$PIDS" ]; then
echo "❌ Keine Prozesse gefunden. Container kann nicht beendet werden."
exit 1
fi
echo "📋 Gefundene Prozesse:"
for PID in $PIDS; do
ps -fp $PID 2>/dev/null
done
echo ""
echo "──────────────────────────────────────────────────────────"
echo ""
read -p "💣 Container hart beenden? (y/N): " CONFIRM
[[ "$CONFIRM" =~ ^[Yy]$ ]] || exit 0
echo ""
echo "──────────────────────────────────────────────────────────"
echo ""
echo "🔥 Beende Container $ID..."
for PID in $PIDS; do
kill -9 $PID 2>/dev/null
done
echo "✅ Container Prozesse beendet."
echo ""
echo "──────────────────────────────────────────────────────────"
echo ""
fi