vagrant VM 中的服务未获取配置

vagrant VM 中的服务未获取配置

我想设置一个 Vagrant 配置来创建和启动一个 Ubuntu 客户虚拟机,它将supervisord在虚拟机内启动一项服务Vagrant up。我希望它能在 Windows、Mac 和 Linux 主机上运行。

我有一个supervisord.conf文件,在配置期间将其复制到虚拟机中(首先复制到用户空间,然后复制/etc/supervisor/这个答案)。此配置文件包含以下几行,以在端口 9001 上提供 GUI 界面(此端口转发到主机):

[inet_http_server]
port=9001

但是,如果我在 Vagrant 配置脚本中发出类似这样的命令,service supervisor start则无法正确获取此配置。我可以通过 ssh 进入虚拟机并验证主管服务是否正在运行,但端口 9001 上没有 GUI。如果我使用 ssh 重新启动服务,则 GUI 在重新启动后可用。

重新启动服务会导致它获取我的配置,这让我认为服务首次启动时配置以某种方式不可用。

这个答案似乎解决了类似的问题。所以我也尝试将文件复制到/etc/init/supervisor.conf

# start supervisord on vagrant mounted

start on vagrant-mounted

exec service supervisor restart

这将导致 upstart 在收到事件时重新启动服务vagrant-mounted。但是,即使这样,supervisor 似乎也没有正确启动。

我通过发出来测试了这个 upstart 脚本sudo initctl emit vagrant-mounted,并观察到主管服务重新启动,并且 GUI 在 9001 上可用。

这使我认为该vagrant-mounted事件可能发生在运行配置脚本之前。

有人知道我是否可以根据其他事件预测我的 upstart 脚本吗?当 vagrant 配置完成时会发出什么事件?

另外,有没有更好或更规范的方法在 vagrant VM 中启动服务?这一切感觉就像我掉进了兔子洞,错过了一些非常明显的东西。

答案1

好的,这个帖子让我知道我可以在 Vagrantfile 中发出我想要的任何 upstart 事件作为最后一步:

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 服务重新启动。这样,我的配置就正确加载了。

相关内容