在我的Vagrant环境中,我有一个带有默认设置LAMP的来宾Ubuntu Virtualbox。
我的主机上的源代码与我的Vagrantfile在同一个文件夹中。所以在访客Ubuntu上我可以像这样访问已安装的/vagrant
目录中的文件
/vagrant
/mysite
/index.php
/Vagrantfile
现在在我的Apache配置中添加一行
Alias /mysite /vagrant/mysite
重新加载配置并重新启动apache之后,我可以转到localhost:8558/mysite/index.php
并且它可以正常工作。
问题是当我用vagrant reload
重新加载Virtualbox时,它会在挂载{{1}}文件夹之前启动Apache服务。所以Apache找不到别名的dir并且无法启动。我必须手动启动它然后
我的问题是 - 有没有办法延迟Apache启动,以便在安装后启动?
更新:作为一种解决方法,我将脚本添加到crontab中,该脚本在启动后30秒启动apache,如here所述。但我想知道是否有更好的解决方案。
答案 0 :(得分:24)
虽然新贵可能是一个有效的选择,但我有几个问题与流浪汉一起使用。我不得不运行几个需要作为特权用户运行的任务,我没有设法与新贵一起工作。
从版本1。6。0(2014年5月6日)开始,vagrant提供了每次运行特定配置程序的选项,因此在启动暂停的虚拟机后也是如此。
在Vagrantfile
中,添加:
# a file, eg after-boot.sh
config.vm.provision "shell", path: "after-boot.sh", run: "always"
# or just inline
config.vm.provision "shell", inline: "service apache2 restart", run: "always"
注意run: "always"
,这将迫使流浪者总是运行供应商,显然它与任何其他配置系统(如厨师或木偶)一样好。
答案 1 :(得分:3)
如果安装了upstart(如在Ubuntu中),Vagrant会发出“vagrant-mounted”事件。请参阅https://serverfault.com/a/568033/179583以了解相关信息。在您的脚本中,您可以(重新)启动Apache服务器。
不过,我觉得新的Apache版本只是警告,但即使doc根目录不存在,它仍然会启动。与nginx相同。答案 2 :(得分:3)
我想补充一点Zauberfisch的回答(Apache fails to start on Vagrant)
需要发生的事情是这个命令需要作为超级用户AKA'Sudo'运行所以这是需要的命令:
`config.vm.provision "shell", inline: "sudo service apache2 restart", run: "always"`
如果没有sudo
,这对你不起作用的原因似乎是Vagrant试图在/usr/sbin
中没有PATH
的情况下运行命令。对我来说,这也很有效:
`config.vm.provision "shell", inline: "/usr/sbin/service apache2 restart", run: "always"`