script inicio iniciar ejecutar crear como comando automaticamente arrancar linux vagrant vagrant-provision

linux - iniciar - Vagrant ejecuta la secuencia de comandos o el comando después de cada reinicio del invitado



ejecutar script bash al inicio ubuntu (2)

Sé sobre el script de aprovisionamiento, pero este es un script diferente sobre el que estoy preguntando. Quiero que se ejecute un script después de cada reinicio del invitado.

Estoy usando shell provisioner.

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

No puedo poner mis comandos en este script que quiero ejecutar después de cada reinicio.

Básicamente, quiero que una de mis aplicaciones se inicie cuando el usuario ejecuta vagrant up .

Mi invitado es ubuntu 14.04 de confianza y una solución que encontré fue hacer lo siguiente en mi invitado:

sudo crontab -e #add the following line @reboot sh /path/to/my_script_on_guest.sh

Puedo intentar hacer esto en mi script de aprovisionamiento, pero sudo crontab -e solicita un editor y tengo que agregar la línea de forma interactiva. Dado que el archivo crontab no está arreglado, no sé si es posible realizar ediciones de un archivo de línea como

echo ''@reboot sh /path/to/my_script_on_guest.sh'' >> crontab_file

Supongo que esto debe ser una cosa específica del sistema operativo invitado.

¿Es posible lograr esto usando Vagrant?

EDITAR: corregido de ssh provisioner a shell provisioner.


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

Ejecutar una secuencia de comandos remota 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 relacionado con vagrant-triggers que puedes 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 inicie su VM (vagrant up o vagrant reload)

Si solo necesita ejecutar ciertos comandos, puede dividir su 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"

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

cualquier vez que ejecute vagrant up (o reload) solo se ejecutará bootstrap2