
我在 Ubuntu 12.04 主機上執行兩台 VirtualBox 無頭虛擬機器。我希望這些虛擬機器在系統啟動時自動啟動。
我有兩個像這樣設定的 crontab 條目(在擁有虛擬機器的使用者下):
@reboot /usr/bin/vboxheadless -startvm io
@reboot /usr/bin/vboxheadless -startvm pbx
但似乎這並不能解決問題。如果我直接從終端機執行命令,機器會順利啟動,但係統啟動後我似乎無法讓它們啟動。我想也許 crontab 在 VirtualBox 程式/庫載入之前運行。
如何自動啟動這些虛擬機器?
答案1
這就是我用的。它在啟動時啟動虛擬機器並在關閉/重新啟動時保存其狀態
#!/bin/bash
### BEGIN INIT INFO
# Provides: vmboot
# Required-Start: vboxdrv
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Stop/Start VMs on System shutdown
### END INIT INFO
VBOXUSER=vboxuser
SU="sudo -H -u $VBOXUSER"
VBOXMANAGE=/usr/bin/VBoxManage
VBOXHEADLESS=/usr/bin/VBoxHeadless
RUNNINGVMS=$($SU $VBOXMANAGE --nologo list runningvms | sed -e 's/^".*".*{\(.*\)}/\1/')
ALLVMS=$($SU $VBOXMANAGE --nologo list vms | sed -e 's/^".*".*{\(.*\)}/\1/')
case $1 in
stop)
if [[ -n $RUNNINGVMS ]]; then
echo "Saving the state of all running VMs..."
for v in $RUNNINGVMS; do
$SU $VBOXMANAGE --nologo controlvm $v savestate
done
fi
;;
start)
for v in $ALLVMS; do
if [[ -n $($SU $VBOXMANAGE --nologo showvminfo $v | grep saved) ]]; then
echo "Restoring VMs..." && $SU $VBOXHEADLESS -s $v & > /dev/null
fi
done
;;
*)
echo "Usage: /etc/init.d/vmboot start | stop"; exit 1
;;
esac
exit 0
只需將其保存在/etc/init.d 中即可。我將我的命名為 vbox。跑吧update-rc.d <script name> defaults
,你應該就可以出發了。
答案2
我懷疑您在手動啟動虛擬機器時使用 root 以外的帳戶登錄,同時cron
以 root 身份運行,因此不知道您的虛擬機器。您可以透過執行命令來檢查
sudo /usr/bin/vboxheadless -startvm io
如果出現錯誤
Invalid machine name or UUID!
虛擬機器未使用 root 帳號註冊。在這種情況下,建立一個 shell 腳本來在您的帳戶下執行命令並使用以下命令安排該腳本cron
:
#!/bin/sh
USERNAME=...
su -c "/usr/bin/vboxheadless -startvm io" - $USERNAME
su -c "/usr/bin/vboxheadless -startvm pbx" - $USERNAME
答案3
如果您的 MB/CPU 支援硬體視覺化,第二個選項也是 ProxMox。它是 Linux、KVM 和 Web 介面的獨立安裝。它比 virtualbox 具有更好的效能,因為它在核心層級運行,而不是像 virtualbox 使用的僅「虛擬」驅動器,您實際上可以將 KVM 下的來賓連接到使用較少磁碟 Io 的實體驅動器。
快速檢查您的系統是否支援硬體視覺化:
egrep -c '(vmx|svm)' /proc/cpuinfo