Headless Virtualbox – starte VM’er automagisk :)

Hvis man har en headless (intet grafisk interface) virtualbox server er der efter hvad jeg ved ikke nogen speciel smart indbygget måde at få systemet til selv at starte VM’erne efter hosten har været genstartet.

Jeg har i lang tid bare levet med at starte de virtueller maskiner manuelt efter genstart af hosten, men jeg har også glemt det et par gange, og det er irriterende at opdage at maskinen nu ikke har kørt i f.eks. 10 dage fordi der har været en genstart.

Derfor besluttede jeg mig for at finde en løsning, og jeg kom frem til nedenstående.

I mit crontab (for min virtualbox bruger) har jeg indsat følgende:

@reboot /home/vmuser/startvm.sh

Det gør at scriptet startvm.sh bliver kørt hver gang computeren starter op.

Scriptet startvm.sh ser ud som følger:


#!/bin/bash

echo `VBoxManage list vms | awk {‘ print $1 ‘} | grep \”\*\” | sed s/\”//g` > /home/vmuser/vmlist

sleep 2

for VM in `cat /home/vmuser/vmlist`; do
VBoxManage startvm $VM –type headless
sleep 30
done

exit 0

Den laver altså en fil hvor den lister navnene på mine virtuelle maskiner, og starter dem så en ad gangen med 30 sekunders mellemrum.

Med ovenstående script og opsætning skulle dine VM’er gerne starte op automatisk når din maskine bliver genstartet.

UPDATE

Jeg har ændret oenstående script så det bruger et array istedet for en fil til at køre navnene på mine VM’er igennem scriptet. Det ser nu således ud:

#!/bin/bash

sleep 30

ARRAY=(`VBoxManage list vms | awk {‘ print $1 ‘} | grep \”\*\” | sed s/\”//g`)

sleep 2

for i in ${ARRAY[*]}; do
VBoxManage startvm $i –type headless
sleep 30
done
exit 0

Jeg bruger sleep 30 i starten for lige at lade den starte alle services inden den forsøger at starte VM’erne, og jeg bruger sleep 30 i for løkken for at give den 30 sekunder mellem hver VM den starter op.

Ovenstående er testet og virker i mit setup.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.