分类: LINUX
2011-03-27 13:48:36
I was searching for a solution to launch and suspend VMWare Workstation VMs on a CentOS 5-machine during boot/shutdown.
A script script for launching VirtualBox VMS during boot inspired me to create one for VMWare Workstation.
In this example I have teamed my VMs in a team /vms/my_team.vmtm, it could as well be a single VM (.vmx) that is being launched.
The VM Team will be launched with a different user account as VMWare not allows root to launch VMs.
During shutdown root however can suspend the VM Team, and this is also the action being used during system shutdown.
useradd vmuser
passwd vmuser
vi /etc/init.d/vmheadless
#!/bin/bash ### BEGIN INIT INFO # Provides: vmheadless.sh # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # chkconfig: 2345 99 20 # Short-Description: Start VM # Description: Start/stop the virtual machines ### END INIT INFO MACHINE_NAME="/vms/my_team.vmtm" VM_USER="vmuser" RETVAL=0 LD_LIBRARY_PATH=/usr/lib/vmware:$LD_LIBRARY_PATH PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin id=`id -u` if [ "$id" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi # Load the VERBOSE setting and other rcS variables [ -f /etc/default/rcS ] && . /etc/default/rcS # Load the VERBOSE setting and other rcS variables #. /lib/init/vars.sh # Define LSB log_* functions. # Depend on lsb-base (>= 3.0-6) to ensure that this file is present. . /lib/lsb/init-functions # Get function from functions library . /etc/init.d/functions # Load network defaults. Use this if there is any extra network stuff to do first. case "$1" in start) su $VM_USER -c "/usr/bin/vmrun start $MACHINE_NAME nogui" RETVAL=0 echo "Started VM Headless RETVAL=($RETVAL)" ;; stop) /usr/bin/vmrun suspend "$MACHINE_NAME" RETVAL=$? echo "Suspended VM Headless RETVAL=($RETVAL)" ;; status) ps=`ps -ef | grep vmware-vmx | grep -v grep | wc -l` if [ "$ps" -gt 0 ] ; then echo "$ps VMS started" RETVAL=1 else echo "VMS not running" RETVAL=0 fi ;; restart) /usr/bin/vmrun suspend "$MACHINE_NAME" nogui RETVAL=$? echo "Suspended VM Headless RETVAL=($RETVAL)" su backup -c "/usr/bin/vmrun -T ws start $MACHINE_NAME nogui" RETVAL=$? echo "Started VM Headless RETVAL=($RETVAL)" ;; *) echo "Usage: $0 { start | stop }" RETVAL=1 ;; esac exit $RETVAL
chkconfig --add vmheadless
chkonfig --level 2345 vmheadless on
service vmheadless start