我想设置一个Vagrantconfiguration来创build和启动一个Ubuntu guest虚拟机,它将在Vagrant up后在虚拟机内启动一个supervisord服务。 我想为此在Windows,Mac和Linux主机上工作。
我有一个supervisord.conf文件,我在备份期间复制到虚拟机(通过先复制到用户空间,然后复制到/etc/supervisor/如在此答案中 )。 这个configuration文件包含这些线路来为端口9001上的GUI接口提供服务(这个端口被转发给主机):
[inet_http_server] port=9001
但是,如果我在service supervisor start的Vagrantconfiguration脚本中发出命令,则此configuration没有正确拾取。 我可以SSH进入虚拟机,并validation监控程序服务正在运行,但在端口9001上不可用GUI。如果我使用ssh重新启动服务,则重新启动后GUI将变为可用。
重新启动服务导致它拿起我的configuration让我觉得configuration是不可用的,当服务第一次启动。
这个答案似乎解决了类似的问题。 所以我也尝试复制一个文件到/etc/init/supervisor.conf :
# start supervisord on vagrant mounted start on vagrant-mounted exec service supervisor restart
这将导致新贵重新启动服务,当它收到vagrant-mounted事件。 但是,即使这样,主pipe似乎也没有正确启动。
我通过发布sudo initctl emit vagrant-mountedtesting这个新贵脚本,并且观察到supervisor服务重新启动,并且GUI在9001上变得可用。
这让我觉得这个vagrant-mounted事件可能发生在configuration脚本运行之前。
有谁知道是否有其他事件可以预测我的新贵脚本? stream浪者配备完成时发出的东西?
另外,有没有更好的或规范的方式发起一个stream浪VM的服务? 这一切都感觉就像我已经放下了一个兔子洞,错过了一些非常明显的东西。
好吧, 这个post让我知道,我可以发出任何我想作为我的stream浪文件的最后一步的暴发事件:
Vagrant.configure(2) do |config| config.vm.provision :file do |file| file.source = "./conf/vagrant-ready.conf" file.destination = "vagrant-ready.conf" end config.vm.provision :shell, path: "provision.sh" config.vm.provision :shell, :inline => "sudo initctl emit vagrant-ready" end
我可以触发重新启动supervisord服务与vagrant-ready事件:
# start supervisord on vagrant mounted start on vagrant-ready exec service supervisor restart
我的供应脚本是:
#!/bin/bash apt-get update apt-get install -y supervisor mv /home/vagrant/supervisord.conf /etc/supervisor/ mv /home/vagrant/vagrant-ready.conf /etc/init/
这个设置确保在supervisord.conf文件到位后,supervisord服务重新启动。 这样,我的configuration正确加载。