web-dev-qa-db-ja.com

ホストの起動時にVagrant VM

私はvagrantを初めて使用し、開発とテストの目的で使用するいくつかのvagrantvmをセットアップしました。私の問題は、これらのボックスを自分のマシン(Ubuntu)で自動的に起動できないことです。ホストマシンが起動するたびに、フォルダに移動して各マシンをvagrant upするのは本当に面倒です。

cd path/to/vm/folder && vagrant upのようなcronジョブを追加しようとしましたが、これは機能していないようです。

VBoxManageのc​​ronジョブも試しましたが、vagrantはVMが起動するたびにVMの名前(番号/バージョン 'vmname_version')を変更します。

20

Cronジョブはこのユースケースに適合しません。スケジュールされたジョブ用です。

Ubuntuをホストとして実行しているので、/etc/rc.localを使用することをお勧めします。コマンドは、initプロセスの最後に実行されるrc.localスクリプトに配置します。

このようになります

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.    
cd /path/to/vagrant_vm1 && vagrant up
cd /path/to/vagrant_vm2 && vagrant up
exit 0

[〜#〜] note [〜#〜]:同じネットワークで複数のVagrantボックスを起動すると、ホストでポートの競合が発生しますモード-NAT(デフォルト)。デフォルトでは同じポート転送ルールを使用します=>ゲスト22からホスト2222へ。

複数のボックス(NAT)を起動する必要がある場合は、パブリックネットワーク(ブリッジ)の使用を検討するか、VBoxManage controlvmを使用してVMを起動します。 2つの別々のVagrantマシン、Windowsホスト、PuTTY)の回答を参照してください。 -どうやって?

12
Terry Wang

これは http://uhowto.urbylog.info/post/54097294891/an-upstart-script-to-launch-vagrant-box-automatically にある起動スクリプトです。

Vagrantボックスを自動的に起動するupstartスクリプトホストの起動時にvagrant仮想マシンを自動的に起動する必要がある場合があります。同様に、ホストがオフまたは再起動されているときに、ゲストに正常なシャットダウンを提供します。以下は、randomjoeユーザーに代わってvagrantボックスを起動/停止するためのupstartスクリプトの例です。以下のスクリプトでユーザー名とVagrantfileディレクトリを変更します。 upstart構成ファイルにわかりやすい名前を付けます。システムの起動時に起動して実行する必要のあるVagrantfileごとに1つの/etc/init/*.confファイルを作成します。 /etc/init/vagrant-precise32.conf:

description "Start vagrant precise32 box on system startup"
author "uHOWTO"
env VAGRANTUSR=randomjoe
env VAGRANTBOXPATH=/home/randomjoe/vagrantboxes/precise32
start on stopped rc
stop on runlevel [016]

pre-start script
    cd ${VAGRANTBOXPATH}
    su -c "/usr/bin/vagrant up" ${VAGRANTUSR}
end script

post-stop script
    cd ${VAGRANTBOXPATH}
    su -c "/usr/bin/vagrant halt" ${VAGRANTUSR}
end script
7
Damian Dennis

結局、VMのクローンをVboxManageで作成し、init.dスクリプトでVBoxManage startvm $vm --type headlessを使用するだけでした。

0