GNU/Linux >> Znalost Linux >  >> Linux

Vagrant spustí skript nebo příkaz po každém restartu hosta (vagrant up)

Jen nabízím alternativu, která pro mě fungovala, pomocí tuláků. Zvažte tento příklad přímo z jejich dokumentů:

Spuštění vzdáleného skriptu pro uložení databáze na vašem hostiteli před zničením hosta:

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

K dispozici je také související plugin vagrant-triggers, který si můžete vyzkoušet


můžete použít run: 'always'

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

Tím zajistíte, že váš příkaz bude proveden při každém spuštění vašeho virtuálního počítače (vagrant up nebo vagrant reload)

Pokud potřebujete, aby byly vždy spuštěny pouze určité příkazy, můžete skript rozdělit

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"

skript bude spuštěn v pořadí, bootstrap1, poté 2 a poté 3 při prvním zřízení počítače

při každém dalším spuštění vagrant up (nebo znovu načíst) bude spuštěn pouze bootstrap2


Použil jsem ubuntu 18.04. Spouštěče mi nefungovaly, takže jsem se rozhodl zkopírovat skript post-provision do vm boxu a poté z hlavního skriptu spustit požadovaný post-provision:

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

obsah hlavního skriptu používá exec k obnovení nového shellu. Můžete také použít

resetovat

sudo chmod  +x *.sh
exec /home/vagrant/install-monitor-stack.sh
exec /home/vagrant/bootstrap.sh

Linux
  1. Jak vytvořit skript příkazu Linux

  2. Způsobit spuštění skriptu po spuštění sítě?

  3. Jak provést příkaz před přihlášením uživatele v systému Linux?

  1. Provést příkaz ve vzdáleném aktivním terminálu?

  2. Proveďte příkaz, kde je nalezen soubor?

  3. nohup:příkaz nenalezen

  1. Proveďte příkaz pro každý soubor v aktuálním adresáři

  2. matlab spustí skript z příkazové řádky linuxu

  3. Po přihlášení spusťte bash skript