feat(deploy+bench+ops): DGX vm scripts, Windows RDP launcher, bench cases, agent_chat enable script
This commit is contained in:
50
deploy/dgx/vm_stop.sh
Executable file
50
deploy/dgx/vm_stop.sh
Executable file
@@ -0,0 +1,50 @@
|
||||
#!/bin/bash
|
||||
# Persistent VM stop — ACPI poweroff via QEMU monitor, then SIGTERM, then SIGKILL
|
||||
# Kill swtpm after QEMU exits. Cleanup PID/sockets.
|
||||
|
||||
VMROOT=/home/aivanov/quickemu-win11-arm-lea
|
||||
MONITOR_SOCKET="$VMROOT/windows-11-arm-lea-monitor.socket"
|
||||
PIDFILE="$VMROOT/windows-11-arm-lea.pid"
|
||||
|
||||
# Step 1: Send ACPI poweroff via QEMU monitor
|
||||
if [ -S "$MONITOR_SOCKET" ]; then
|
||||
echo "system_powerdown" | socat - UNIX-CONNECT:"$MONITOR_SOCKET" - > /dev/null 2>&1
|
||||
echo "ACPI poweroff sent, waiting 30s..."
|
||||
for i in $(seq 1 30); do
|
||||
if [ ! -f "$PIDFILE" ] || ! ps -p "$(cat "$PIDFILE" 2>/dev/null)" > /dev/null 2>&1; then
|
||||
echo "QEMU exited gracefully"
|
||||
exit 0
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
fi
|
||||
|
||||
# Step 2: SIGTERM (10s more)
|
||||
QEMU_PID=$(cat "$PIDFILE" 2>/dev/null)
|
||||
if [ -n "$QEMU_PID" ] && ps -p "$QEMU_PID" > /dev/null 2>&1; then
|
||||
echo "Still running, sending SIGTERM..."
|
||||
kill "$QEMU_PID" 2>/dev/null
|
||||
for i in $(seq 1 10); do
|
||||
if ! ps -p "$QEMU_PID" > /dev/null 2>&1; then
|
||||
echo "QEMU exited after SIGTERM"
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
fi
|
||||
|
||||
# Step 3: SIGKILL
|
||||
QEMU_PID=$(cat "$PIDFILE" 2>/dev/null)
|
||||
if [ -n "$QEMU_PID" ] && ps -p "$QEMU_PID" > /dev/null 2>&1; then
|
||||
echo "Still running, SIGKILL..."
|
||||
kill -9 "$QEMU_PID" 2>/dev/null
|
||||
sleep 2
|
||||
fi
|
||||
|
||||
# Step 4: Kill swtpm
|
||||
pkill -f "swtpm.*windows-11-arm-lea" 2>/dev/null
|
||||
sleep 2
|
||||
|
||||
# Step 5: Cleanup
|
||||
rm -f "$PIDFILE" "$VMROOT"/*.sock "$VMROOT"/*.socket 2>/dev/null
|
||||
echo "VM stop complete"
|
||||
Reference in New Issue
Block a user