Я пытаюсь настроить службу systemd в поле Vagrant, для которого перед запуском необходимо смонтировать синхронизированную папку Vagrant.
Vagrantfile
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/yakkety64"
config.vm.synced_folder ".", "/usr/local/src"
config.vm.provision "shell", path: "bootstrap/bootstrap"
end
/etc/systemd/system/my-server.service
[Service]
ExecStart=/usr/bin/node /usr/local/src/index.js
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=my-server
User=ubuntu
Group=ubuntu
[Unit]
Requires=remote-fs.target
After=vboxguest.service
After=virtualbox-guest-utils.service
[Install]
WantedBy=remote-fs.target
Если я не включу мой-сервер service синхронизированная папка правильно смонтирована. Но когда я пытаюсь включить мой-сервер service, служба не может найти подключенные файлы. Если я затем войду в окно Vagrant, папка не будет смонтирована. Похоже, что попытка службы загрузить файлы с этого пути мешает Vagrant.
Итак, как мне дождаться подключения папок до запуска службы?
Другие решения по-разному не работают, требуя ручного вмешательства для запуска службы, что недопустимо.
Я только что решил такую проблему, добавив:
[Install]
WantedBy=multi-user.target var-www-example.com.mount'
где var-www-example.com
соответствует:
config.vm.synced_folder ".", "/var/www/example.com"
в Vagrantfile
.
Таким образом, Vagrant имеет системный модуль XXX.mount для каждой точки монтирования синхронизированной папки. Вы можете найти свой с помощью:
# systemctl list-units | fgrep .mount
У меня была аналогичная проблема, когда одна из моих служб systemd требовала наличия бродячей синхронизированной файловой системы до запуска службы для успешного запуска. Я решил проблему, установив поставщик бродячих оболочек автоматически перезапускать службу при каждом запуске. Это работает, потому что провайдер запускается после того, как vagrant смонтирует синхронизированные файловые системы.
config.vm.provision "shell", run: "always", inline: "systemctl restart my-server"
Я не уверен, почему ваш сервис может мешать вашей синхронизированной файловой системе. Vagrant синхронизирует папку, в которой находится ваш vagrantfile, по умолчанию с / vagrant. Мог ли он быть установлен дважды?