скрипт управления init.d для виртуальной машины virtualbox

скрипт управления init.d для виртуальной машины virtualbox

У меня есть сервер Ubuntu, на котором виртуальная машина Virtualbox должна быть запущена постоянно. Виртуальные машины администрируются определенным пользователем, VMAdminу которого нет прав администратора. Мне нужно создать скрипт init.d для управления моими виртуальными машинами Virtualbox.
Он должен:

  • запускать виртуальную машину при каждой загрузке хост-системы;
  • сохранять состояние гостевой системы при каждом выключении хоста;
  • предоставить команды для запуска, выключения, сброса и резервного копирования виртуальной машины.

решение1

Следующий скрипт выполняет все вышеперечисленное:

#! /bin/sh
# /etc/init.d/vbox

#Edit these variables!
VMUSER=VMAdmin
VMNAME="cdb62186-7c30-4c25-a0b0-e4a32cfb0504"
BASEFOLDER=/home/VMAdmin/path/to/backups/

case "$1" in
    start)
        echo "Starting VirtualBox VM..."
        sudo -H -u $VMUSER VBoxManage startvm "$VMNAME" --type headless
        ;;
    reset)
        echo "Resetting VirtualBox VM..."
        sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" reset
        ;;
    stop)
        echo "Saving state of Virtualbox VM..."
        sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" savestate
        ;;
    shutdown)
        echo "Shutting down Virtualbox VM..."
        sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" acpipowerbutton
        ;;
    status)
        sudo -H -u $VMUSER VBoxManage list vms -l | grep -e ^"$VMNAME": -e ^State | sed s/\ \ //g | cut -d: -f2-
        ;;
    backup)
        echo ""
        sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" acpipowerbutton

        echo "Waiting for VM "$VMNAME" to poweroff..."
        until $(sudo -H -u $VMUSER VBoxManage showvminfo --machinereadable "$VMNAME" | grep -q ^VMState=.poweroff.)
        do
          sleep 1
        done

        FILENAME=$(date +"%Y_%m_%d-%T")
        echo "Backing up Virtualbox VM to '$BASEFOLDER$FILENAME'..."
        sudo -H -u $VMUSER VBoxManage clonevm "$VMNAME" --options keepallmacs --name $FILENAME --basefolder $BASEFOLDER

        echo "Restarting VirtualBox VM..."
        sudo -H -u $VMUSER VBoxManage startvm "$VMNAME" --type headless
        echo ""
        ;;
    *)
        echo "Usage: sudo service vbox {start|stop|status|shutdown|reset|backup}"
        exit 1
        ;;
esac

exit 0

Укажите скрипту, который будет завершать работу первым и запускаться последним:

sudo update-rc.d vbox defaults 99 01

Чтобы добавить задачу резервного копирования в crontab, выполните:

sudo crontab -e

И добавьте строку вроде:

* 3 * * 5 service vbox backup

Который будет запускать еженедельное резервное копирование по пятницам в 3 часа ночи. Для получения дополнительной информации о создании задачи crontab см.: http://www.cyberciti.biz/faq/how-do-i-add-jobs-to-cron-under-linux-or-unix-oses/

Сопутствующий вопрос:Bash-скрипт для ожидания выключения виртуальной машины Virtualbox?

Связанный контент