ric*_*mer 7 virtualbox network-share vagrant systemd
我正在尝试在 Vagrant 盒子上设置一个 systemd 服务,它需要在开始之前安装 Vagrant 同步文件夹。
流浪档案
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
Run Code Online (Sandbox Code Playgroud)
/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
Run Code Online (Sandbox Code Playgroud)
如果我不启用my-server服务,则同步文件夹已正确安装。但是当我尝试启用my-server服务时,该服务无法找到挂载的文件。如果我然后登录到 Vagrant 框,则不会安装该文件夹。似乎该服务尝试从该路径加载文件会干扰 Vagrant。
那么,如何在我的服务启动之前等待文件夹被挂载?
其他解决方案在各种方面都存在不足,需要人工干预才能启动服务,这是不可接受的。
我刚刚通过添加以下内容解决了这种问题:
[Install]
WantedBy=multi-user.target var-www-example.com.mount'
Run Code Online (Sandbox Code Playgroud)
其中var-www-example.com对应于:
config.vm.synced_folder ".", "/var/www/example.com"
Run Code Online (Sandbox Code Playgroud)
在Vagrantfile.
因此,Vagrant 的每个同步文件夹挂载点都有一个 XXX.mount systemd 单元。您可以通过以下方式找到您的:
# systemctl list-units | fgrep .mount
Run Code Online (Sandbox Code Playgroud)
我遇到了类似的问题,其中我的一个 systemd 服务需要在服务运行成功启动之前存在一个 vagrant 同步文件系统。我通过让vagrant shell 配置程序在每次启动时自动重新启动服务来解决这个问题。这是有效的,因为配置器在 vagrant 挂载同步文件系统后运行。
config.vm.provision "shell", run: "always", inline: "systemctl restart my-server"
Run Code Online (Sandbox Code Playgroud)
我不确定为什么您的服务会干扰您的同步文件系统。Vagrant 默认将 vagrantfile 所在的文件夹同步到 /vagrant。可以安装两次吗?
| 归档时间: |
|
| 查看次数: |
2719 次 |
| 最近记录: |