GNU/Linux >> Belajar Linux >  >> Linux

Gelandangan mengeksekusi skrip atau perintah setelah setiap tamu memulai ulang (gelandangan naik)

Hanya menawarkan alternatif di sini yang berhasil untuk saya, menggunakan pemicu gelandangan. Pertimbangkan contoh ini langsung dari dokumen mereka:

Menjalankan skrip jarak jauh untuk menyimpan database di host Anda sebelum menghancurkan tamu:

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

Ada juga plugin pemicu gelandangan terkait yang dapat Anda lihat


Anda dapat menggunakan run: 'always'

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

Ini akan memastikan perintah Anda dijalankan setiap kali VM Anda dimulai (vagrant up atau vagrant reload)

Jika Anda hanya membutuhkan perintah tertentu untuk selalu dijalankan, Anda dapat memisahkan skrip Anda

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"

skrip akan dijalankan secara berurutan, bootstrap1 lalu 2 lalu 3 saat mesin pertama kali disediakan

kapan pun Anda menjalankan vagrant up (atau muat ulang) hanya bootstrap2 yang akan dijalankan


Saya menggunakan ubuntu 18.04. Pemicu tidak berfungsi untuk saya, jadi saya memilih untuk menyalin skrip pasca-penyediaan ke kotak vm dan kemudian dari skrip master, jalankan pasca-penyediaan yang diinginkan:

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

konten skrip master menggunakan exec untuk menyegarkan shell baru. Anda juga bisa menggunakan

setel ulang

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

Linux
  1. nohup:perintah tidak ditemukan

  2. Jalankan perintah untuk setiap file di direktori saat ini

  3. Jalankan skrip bash dari URL

  1. matlab mengeksekusi skrip dari baris perintah linux

  2. Jalankan skrip bash setelah login

  3. -bash:/bin/cd:Tidak ada file atau direktori seperti itu - secara otomatis mengeksekusi ls setelah cd

  1. Jalankan Perintah Di Terminal Aktif Jarak Jauh?

  2. Jalankan Perintah Pada Rentang Direktori yang Ditentukan?

  3. Jalankan Perintah Nohup Dengan Input?