vagrant VM 中的服務未獲取配置
我想設置一個 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 服務。這樣,我的配置就被正確載入了。