每次访客重启后流浪者执行脚本或命令(流浪者)

Pra*_*kla 31 linux vagrant vagrant-provision

我知道配置脚本,但这是我要问的不同脚本.我想在每次重新启动guest虚拟机后执行脚本.

我正在使用shell配置程序.

config.vm.provision :shell, path: "vagrant/bootstrap.sh"
Run Code Online (Sandbox Code Playgroud)

我不能将我的命令放在我想在每次重启后运行的脚本中.

基本上,我希望在用户执行时启动我的一个应用程序vagrant up.

我的客人是ubuntu 14.04可靠,我找到的一个解决方案是在我的客人上做以下 -

sudo crontab -e
#add the following line 
@reboot sh /path/to/my_script_on_guest.sh
Run Code Online (Sandbox Code Playgroud)

我可以尝试在我的配置脚本中执行此操作,但sudo crontab -e要求编辑器,我必须以交互方式添加该行.由于crontab文件没有修复,我不知道是否可以做一个像衬里文件一样的编辑

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

我猜这必须是客户操作系统特定的事情.

这可能是使用Vagrant实现的吗?

编辑:从ssh配置器更改为shell配置器.

Fré*_*nri 51

您可以使用 run: 'always'

config.vm.provision :shell, path: "vagrant/bootstrap.sh", run: 'always'
Run Code Online (Sandbox Code Playgroud)

这将确保每次启动VM时执行命令(流浪者或流浪汉重新加载)

如果您只需要始终运行某些命令,则可以拆分脚本

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"
Run Code Online (Sandbox Code Playgroud)

脚本将按顺序运行,bootstrap1然后2,然后在首次配置机器时运行3

您运行vagrant up(或重新加载)的任何时间仅运行bootstrap2


kip*_*ip2 5

只是在这里提供一个对我有用的替代方案,使用vagrant triggers。直接从他们的文档中考虑这个例子:

在销毁来宾之前运行远程脚本以在主机上保存数据库:

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
Run Code Online (Sandbox Code Playgroud)

您还可以查看相关的vagrant-triggers 插件