init скрипт для запуска машин

Скрипт копируем в /etc/init.d

Создаем пользователя, от которого будут стартовать виртуальные машины, в данном примере это пользователь vbox, добавляем его в группу vboxusers. Создаем файлик /etc/vbox/machines_enabled, где прописываем машины которые должны запускаться при старте и останавливаться при завершени работы. Далее используем стандарнтый chkconfig и service для управления. Скрипт работает на версии 3.0.10, замечаны проблемы с запуском виртуальных машин через VBoxManage в версиях 3.0.12 и 3.1.0, но с версии 3.1.4 все опять работает :-)

#!/bin/sh
#
# chkconfig: 35 90 10
# description: VirtualBox
# (c) Yury Konovalov aka Speccyfan (2:453/53)
VBOXDIR="/etc/vbox"
VM_USER="vbox"
WITHOUT_RC_COMPAT=1
LOCKFILE=/var/lock/subsys/vbox
# source function library
. /etc/init.d/functions
RETVAL=0
export PATH="${PATH:+$PATH:}/bin:/usr/bin:/usr/sbin:/sbin:/opt/VirtualBox"
if [ -f $VBOXDIR/vbox.cfg ]; then
    . $VBOXDIR/vbox.cfg
else
    echo "ERROR: $VBOXDIR/vbox.cfg does not exist. Exiting."
    exit 1
fi
SU="su - $VM_USER -c"
VBOXMANAGE="VBoxManage -nologo"
TIMER=/tmp/vboxtimer
# Check for running machines every few seconds; return when all machines are
# down
wait_for_closing_machines() {
    RUNNING_MACHINES=`$SU "$VBOXMANAGE list runningvms" | awk '{ print $1 }'|grep \" | sed -e 's/"//g' | wc -l`
    if [ $RUNNING_MACHINES != 0 ]; then
        sleep 5
        T=`cat $TIMER`
        let T="$T+1"
        echo $T > $TIMER
        #echo $T
        if [ $T = "60" ]; then
    #killing machines
    echo \"acpipowerbutton\" timeout
    echo Forcing \"poweroff\" ...
    echo 0 > $TIMER
        $SU "VBoxManage list runningvms"|awk '{ print $1 }'|grep \"|sed -e 's/"//g' | while read VM; do
            $SU "$VBOXMANAGE controlvm \"$VM\" poweroff"
        done
        fi
        wait_for_closing_machines
    fi
}
start()
{
        if [ -f /etc/vbox/machines_enabled ]; then
            cat /etc/vbox/machines_enabled | while read VM; do
                $SU "$VBOXMANAGE startvm \"$VM\" -type headless"
                RETVAL=0
            done
            touch $LOCKFILE
        fi
    success
}
stop()
{
        $SU "VBoxManage list runningvms"|awk '{ print $1 }'|grep \"|sed -e 's/"//g' | while read VM; do
        $SU "$VBOXMANAGE controlvm \"$VM\" acpipowerbutton"
        done
    echo 0 > $TIMER
        wait_for_closing_machines
        rm -f $LOCKFILE
        success
}
status()
{
    $SU "VBoxManage list runningvms"| grep \"| while read VM; do
    echo Running $VM
    done
    return 0
}
case "$1" in
    start)
        start
    ;;
    stop)
        stop
    ;;
    status)
    status
    ;;
    *)
        msg_usage "${0##*/} {start|stop|status}"
        RETVAL=1
esac
exit $RETVAL