Ubuntu

vagrant VM 中的服務未獲取配置

  • April 17, 2015

我想設置一個 Vagrant 配置來創建和啟動一個 Ubuntu 來賓 VM,supervisord該 VM 將在Vagrant up. 我希望它可以在 Windows、Mac 和 Linux 主機上執行。

我有一個supervisord.conf文件,我在配置期間複製到虛擬機(首先複製到使用者空間,然後復製到/etc/supervisor/這個答案中)。此配置文件包括這些行以在埠 9001 上提供 GUI 界面(此埠被轉發到主機):

[inet_http_server]
port=9001

但是,如果我在 Vagrant 配置腳本中發出類似的命令,service supervisor start則不會正確選擇此配置。我可以通過 ssh 進入虛擬機並驗證主管服務是否正在執行,但 GUI 在埠 9001 上不可用。如果我使用 ssh 重新啟動服務,則 GUI 在重新啟動後變得可用。

重新啟動服務會導致它獲取我的配置,這讓我認為該配置在服務首次啟動時以某種方式不可用。

這個答案似乎解決了類似的問題。所以我也嘗試將文件複製到/etc/init/supervisor.conf

# start supervisord on vagrant mounted

start on vagrant-mounted

exec service supervisor restart

這將導致新貴在收到vagrant-mounted事件時重新啟動服務。然而,即使有了這個,主管似乎也沒有正確啟動。

我通過發出 測試了這個 upstart 腳本sudo initctl emit vagrant-mounted,並觀察到主管服務重新啟動,並且 GUI 在 9001 上可用。

這讓我認為該vagrant-mounted事件可能發生在配置腳本執行之前。

有人知道我是否可以預測我的暴發戶腳本是否有任何其他事件?vagrant 配置完成時發出的東西?

此外,有沒有更好或規範的方式在 vagrant VM 中啟動服務?這一切都感覺就像我掉進了兔子洞,錯過了一些非常明顯的東西。

好的,這篇文章讓我知道我可以在我的 Vagrantfile 中發出任何我想要的暴發戶事件作為最後一步:

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

我可以通過以下vagrant-ready事件觸發重新啟動 supervisord 服務:

# 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 服務。這樣,我的配置就被正確載入了。

引用自:https://serverfault.com/questions/683159