GNU/Linux >> Linux の 問題 >  >> Linux

ゲストが再起動するたびに Vagrant がスクリプトまたはコマンドを実行する (vagrant up)

浮浪者トリガーを使用して、ここで私のために働いた代替手段を提供するだけです。ドキュメントから直接この例を考えてみましょう:

ゲストを破棄する前に、リモート スクリプトを実行してホストにデータベースを保存する:

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 プラグインもあります


run: 'always' を使用できます

config.vm.provision :shell, path: "vagrant/bootstrap.sh", run: 'always'

これにより、VM が起動するたびにコマンドが実行されるようになります (vagrant up または vagrant reload)

特定のコマンドだけを常に実行する必要がある場合は、スクリプトを分割できます

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 のみが実行されます


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

Linux
  1. Linuxコマンドのスクリプトを作成する方法

  2. ネットワーキングの開始後にスクリプトを実行させますか?

  3. Linuxでユーザーがログインする前にコマンドを実行する方法は?

  1. リモートアクティブターミナルでコマンドを実行しますか?

  2. 検索コマンドの後にMvコマンドを統合する方法は?

  3. ファイルが見つかった場所でコマンドを実行しますか?

  1. nohup:コマンドが見つかりません

  2. 現在のディレクトリ内のすべてのファイルに対してコマンドを実行します

  3. URLからbashスクリプトを実行