Vagrant exécuter le script ou la commande après chaque invité, redémarrez (vagrant up)

je connais le script de provision, mais c'est un script différent que je demande. Je veux un script à exécuter après chaque redémarrage de l'invité.

j'utilise shell provisioner.

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

je ne peux pas mettre mes commandes dans ce script que je veux courir après chaque redémarrage.

en gros, je veux qu'une de mes applications soit lancée quand l'utilisateur exécute vagrant up.

mon invité est ubuntu 14.04 trusty et une solution que j'ai trouvé a faire suivant sur ma guest -

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

je peux essayer de le faire dans mon provisionnement script, mais sudo crontab -e demande un éditeur et je dois ajouter la ligne de façon interactive. Puisque le fichier crontab n'est pas corrigé, Je ne sais pas s'il est possible de faire une édition de fichier de ligne comme

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

je suppose que ça doit être un truc spécifique à l'OS des invités.

Est-ce possible de réaliser à l'aide de Vagabond?

modifier: corrigé de ssh fournisseur à fournisseur shell.

21
demandé sur Pranav Shukla 2016-05-13 13:59:11

2 réponses

vous pouvez utiliser run: 'always'

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

ceci vous assurera que votre commande est exécutée chaque fois que votre VM démarre (vagrant up ou vagrant reload)

si vous n'avez besoin que de certaines commandes pour être toujours exécuté, vous pouvez diviser votre 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"

script sera exécuté dans l'ordre, bootstrap1 puis 2 puis 3 lorsque la machine est d'abord configuré

toute fois que vous exécutez vagrant up (ou recharger) seulement bootstrap2 sera run

34
répondu Frédéric Henri 2016-05-13 11:39:29

juste offrir une alternative ici qui a fonctionné pour moi, en utilisant déclencheurs errants. Considérons cet exemple directement à partir de leur docs:

exécuter un script distant pour sauvegarder une base de données sur votre hôte avant de détruire un invité:

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

Il y a aussi l' vagrant-déclencheurs plugin vous pouvez consulter

0
répondu kip2 2018-08-29 15:08:57