GNU/Linux >> Linux Esercitazione >  >> Linux

Vagrant esegue script o comandi dopo ogni riavvio dell'ospite (vagrant up)

Sto solo offrendo un'alternativa qui che ha funzionato per me, usando trigger vagabondi. Considera questo esempio direttamente dai loro documenti:

Esecuzione di uno script remoto per salvare un database sul tuo host prima di distruggere un guest:

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

C'è anche il relativo plugin vagrant-triggers che puoi controllare


puoi usare run: 'always'

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

Questo assicurerà che il tuo comando venga eseguito ogni volta che la tua VM si avvia (vagrant up o vagrant reload)

Se hai bisogno che solo determinati comandi siano sempre eseguiti, puoi dividere il tuo script

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"

lo script verrà eseguito in ordine, bootstrap1 poi 2 poi 3 quando viene effettuato il primo provisioning della macchina

ogni volta che eseguirai vagrant up (o ricaricare) verrà eseguito solo bootstrap2


Ho usato Ubuntu 18.04. I trigger non hanno funzionato per me, quindi ho scelto di copiare lo script di post-provisioning in vm box e quindi da uno script principale eseguire il post-provisioning desiderato:

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

il contenuto dello script principale utilizza exec per aggiornare la nuova shell. Puoi anche usare

reimposta

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

Linux
  1. Come creare uno script di un comando Linux

  2. Causa Uno script da eseguire dopo l'avvio della rete?

  3. Come eseguire il comando prima dell'accesso dell'utente su Linux?

  4. Eseguire un comando in cui si trova un file?

  5. Esegui lo script Python tramite crontab

Comando di riavvio (riavvio) di Linux

Esempio Crontab – ogni 5 minuti

Come eseguire un comando in uno script della shell?

matlab esegue lo script dalla riga di comando linux

Esegui lo script bash dopo il login

Come consentire all'utente di eseguire un comando contenente virgolette in sudoers?