systemd Vagrant和VirtualBox:等待已安装的同步文件夹

我正在尝试在Vagrant框上设置systemd服务,在启动之前需要安装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 

如果我不启用我的服务器服务,则同步的文件夹已正确安装。 但是,当我尝试启用我的服务器服务时,该服务无法find装入的文件。 如果我然后login到Vagrant框,文件夹没有安装。 这似乎是该服务的尝试从该path加载文件干扰stream浪汉。

那么,在我的服务开始之前,如何等待文件夹被安装?

其他解决scheme有很多种方式,需要人工干预来启动服务,这是不可接受的。

我有一个类似的问题,其中一个我的系统服务需要一个stream浪同步文件系统存在之前,运行服务才能成功启动。 我已经解决了这个问题,有一个stream浪的shellconfiguration程序在每次启动时自动重启服务。 这是有效的,因为在vagrant已经安装了同步的文件系统之后,提供者运行。

 config.vm.provision "shell", run: "always", inline: "systemctl restart my-server" 

我不确定为什么你的服务会干扰你的同步文件系统。 Vagrant默认同步您的vagrantfile所在的文件夹/ vagrant。 它可以装两次吗?

我刚刚解决了这样的问题,join:

 [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 systemd单元。 你可以find你的:

 # systemctl list-units | fgrep .mount