プロビジョニングスクリプトについては知っていますが、これは別のスクリプトです。ゲストを再起動するたびにスクリプトを実行したい。
シェルプロビジョニングツールを使用しています。
config.vm.provision :Shell, path: "vagrant/bootstrap.sh"
再起動のたびに実行したいコマンドをこのスクリプトに入れることはできません。
基本的に、ユーザーがvagrant up
を実行すると、アプリケーションの1つが開始されるようにします。
私のゲストはubuntu 14.04 trustyであり、私が見つけた解決策の1つは私のゲストをフォローすることでした-
Sudo crontab -e
#add the following line
@reboot sh /path/to/my_script_on_guest.sh
プロビジョニングスクリプトでこれを行うことはできますが、Sudo crontab -e
はエディターを要求し、インタラクティブに行を追加する必要があります。 crontabファイルは修正されていないため、次のような1つのライナーファイルの編集が実行可能かどうかわかりません。
echo '@reboot sh /path/to/my_script_on_guest.sh' >> crontab_file
これはゲストOS固有のものであるに違いないと思います。
Vagrantを使用してこれを達成することは可能ですか?
編集:sshプロビジョニングからシェルプロビジョニングへの修正。
run: 'always'
を使用できます
config.vm.provision :Shell, path: "vagrant/bootstrap.sh", run: 'always'
これにより、VMが起動するたびにコマンドが実行されるようになります(浮浪者のアップまたは浮浪者のリロード)
特定のコマンドのみを常に実行する必要がある場合は、スクリプトを分割できます
config.vm.provision :Shell, path: "vagrant/bootstrap1.sh"
config.vm.provision :Shell, path: "vagrant/bootstrap2.sh", run: 'always'
config.vm.provision :Shell, path: "vagrant/bootstrap3.sh"
スクリプトが順番に実行され、マシンが最初にプロビジョニングされたときにbootstrap1、2、3の順に実行されます
vagrant up
(またはリロード)を実行すると、bootstrap2のみが実行されます
ここで vagrant triggers を使用して、私のために働いた代替を提供しています。ドキュメントから直接この例を検討してください:
ゲストを破棄する前に、リモートスクリプトを実行してホストにデータベースを保存します。
Vagrant.configure("2") do |config|
config.vm.define "ubuntu" do |ubuntu|
ubuntu.vm.box = "ubuntu"
ubuntu.trigger.before :destroy do |trigger|
trigger.warn = "Dumping database to /vagrant/outfile"
trigger.run_remote = {inline: "pg_dump dbname > /vagrant/outfile"}
# or trigger.run = {...} to run the command on the Host instead
# of guest
end
end
end
関連する vagrant-triggersプラグイン もあります
Ubuntu 18.04を使用しました。トリガーが機能しなかったため、ポストプロビジョニングスクリプトをvmボックスにコピーし、マスタースクリプトから目的のポストプロビジョニングを実行することを選択しました。
config.trigger.before :provisioner_run, type: :hook do |t|
t.info = "Before the provision!"
end
config.vm.provision "Shell" do |s|
s.inline = "echo $1 "
s.args = [" '--->' Provisioning the environment!"]
end
config.vm.provision "file", source: "scripts/post-provision/.", destination: "/home/vagrant"
config.vm.provision "Shell", path: "scripts/install.sh"
# config.vm.provision "Shell", path: "scripts/bootstrap.sh", run: 'always'
# config.trigger.after :up do |trigger|
# trigger.info = "Installing Monitoring Stack..."
# trigger.run_remote = {path: "./install-monitor-stack.sh"}
# end
end
マスタースクリプトの内容は、execを使用して新しいシェルを更新します。また使用することができます
リセットする
Sudo chmod +x *.sh
exec /home/vagrant/install-monitor-stack.sh
exec /home/vagrant/bootstrap.sh