GNU/Linux >> Tutoriales Linux >  >> Linux

Vagrant ejecutar script o comando después de cada reinicio de invitado (vagrant up)

Solo ofrezco una alternativa aquí que funcionó para mí, usando disparadores vagabundos. Considere este ejemplo directamente de sus documentos:

Ejecutar un script remoto para guardar una base de datos en su host antes de destruir un invitado:

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

También está el complemento de activadores de vagabundos relacionado que puede consultar


puedes usar run: 'always'

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

Esto asegurará que su comando se ejecute cada vez que se inicia su VM (vagrant up o vagabundo recargar)

Si solo necesita que ciertos comandos se ejecuten siempre, puede dividir su secuencia de comandos

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"

el script se ejecutará en orden, bootstrap1, luego 2 y luego 3 cuando la máquina se aprovisione por primera vez

cada vez que ejecute vagrant up (o recargar) solo se ejecutará bootstrap2


Usé ubuntu 18.04. Los disparadores no funcionaron para mí, así que elegí copiar el script de posprovisión a vm box y luego, desde un script maestro, ejecutar la posprovisión deseada:

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

El contenido del script maestro usa exec para actualizar el nuevo shell. También puedes usar

restablecer

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

Linux
  1. Cómo crear un script de un comando de Linux

  2. ¿Ejecutar comando en terminal activo remoto?

  3. ¿Cómo integrar el comando Mv después del comando Buscar?

  4. ¿Ejecutar comando en un rango definido de directorios?

  5. ¿Ejecutar un comando donde se encuentra un archivo?

Comando de reinicio (reinicio) de Linux

¿Ejecutar comando Nohup con entrada?

Ejemplo de crontab:cada 5 minutos

¿Cómo ejecutar un comando en un script de Shell?

nohup:comando no encontrado

Ejecutar secuencia de comandos de Python a través de crontab