Назад | Перейти на главную страницу

служба в бродячей виртуальной машине не собирает конфигурацию

Я хочу настроить конфигурацию Vagrant для создания и запуска гостевой виртуальной машины Ubuntu, которая запустит supervisord сервис внутри ВМ после Vagrant up. Я бы хотел, чтобы это работало на хостах Windows, Mac и Linux.

у меня есть supervisord.conf файл, который я копирую на виртуальную машину во время подготовки (сначала копируя в пространство пользователя, а затем копируя в /etc/supervisor/ как в этот ответ). Этот файл конфигурации включает следующие строки для обслуживания графического интерфейса пользователя на порту 9001 (этот порт перенаправляется на хост):

[inet_http_server]
port=9001

Однако, если я введу команду в сценарии подготовки Vagrant, например service supervisor start то эта конфигурация не правильно подобрана. Я могу подключиться к виртуальной машине с помощью ssh и убедиться, что служба супервизора работает, но графический интерфейс недоступен на порту 9001. Если я перезапущу службу с помощью ssh, графический интерфейс станет доступным после перезапуска.

Этот перезапуск службы приводит к тому, что она забирает мою конфигурацию, заставляет меня думать, что конфигурация каким-то образом была недоступна при первом запуске службы.

Этот ответ похоже, решает аналогичную проблему. Итак, я попытался также скопировать файл в /etc/init/supervisor.conf:

# start supervisord on vagrant mounted

start on vagrant-mounted

exec service supervisor restart

Это приведет к тому, что выскочка перезапустит службу, когда получит vagrant-mounted мероприятие. Однако даже при наличии этого супервизор, похоже, не запустился правильно.

Я протестировал этот сценарий выскочки, выполнив sudo initctl emit vagrant-mounted, и наблюдал перезапуск службы супервизора, и графический интерфейс стал доступен на 9001.

Это заставляет меня думать, что vagrant-mounted событие, вероятно, произошло до запуска сценария подготовки.

Кто-нибудь знает, есть ли другое событие, на которое я мог бы предсказать свои сценарии выскочки? Что-то, что испускается, когда бродячая подготовка завершена?

Кроме того, есть ли лучший или канонический способ запуска службы на бродячей виртуальной машине? Все это похоже на то, что я попал в кроличью нору и пропустил что-то действительно очевидное.

Ладно, эта почта дайте мне знать, что я могу создать любое событие-выскочку, которое захочу, в качестве последнего шага в моем 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 мероприятие:

# 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 на месте. Таким образом, моя конфигурация загружается правильно.