diff --git a/shutdown-all-vms.sh b/shutdown-all-vms.sh index 63f8b33..5bb2d9c 100644 --- a/shutdown-all-vms.sh +++ b/shutdown-all-vms.sh @@ -1,34 +1,55 @@ #!/bin/bash # Script to try to gracefully shut down all running VMs on a Proxmox host, before then force stopping them. - # Running as a sub-script of apcupsd's doshutdown function to ensure that VMs are shut down before the host is powered off. +#v1.1 # Get a list of running VMs vmlist=$(qm list | grep running | awk '{print $1}') +lxclist=$(pct list | grep running | awk '{print $1}') + +echo "Currently running instances" +echo "VM(s) $vmlist" +echo "Container(s)$lxclist" # Loop through the list and force shutdown each VM +echo "Stopping VM(s)..." for vmid in $vmlist do echo "Shutting down VM $vmid" - qm shutdown $vmid --timeout 150 # Try to force shutdown VMs with a 2.5 minute timeout + qm shutdown $vmid +done + +echo "Stopping container(s)..." +for lxcid in $lxclist +do + echo "Shutting down container $lxcid" + pct shutdown $lxcid done # Wait for 30 seconds to allow VMs to shut down -sleep 30 +echo "/nWating for shutdowns to complete." +sleep 150 # Get a list of running VMs again vmlist=$(qm list | grep running | awk '{print $1}') +lxclist=$(pct list | grep running | awk '{print $1}') -# If there are still running VMs, print a warning +# If there are still running VMs, print a warning and kill them if [ -n "$vmlist" ]; then - echo "WARNING: The following VMs are still running:" + echo "WARNING: The following VM/container(s) are still running:" echo $vmlist + echo $lxclist echo "Will attempt to kill them now" for vmid in $vmlist do echo "Killing VM $vmid" qm stop $vmid done + for lxcid in $lxclist + do + echo "Killing container $lxcid" + qm stop $lxcid + done fi # Exit with success