Vagrant上Apache启动失败

13

在我的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时,它会在挂载/vagrant文件夹之前启动Apache服务。所以Apache找不到别名目录,无法启动。我必须手动启动它。

我的问题是 - 是否有一种延迟启动Apache的方法,使其在挂载后启动?

更新: 作为解决方法,我在crontab中添加了一个脚本,在启动30秒后启动Apache,如此处所述。但我想知道是否有更好的解决方案。

3个回答

25

虽然upstart可能是一个有效的选项,但我在使用vagrant时遇到了一些问题。 我必须运行几个需要作为特权用户运行的任务,但我无法通过upstart实现。

从版本1.6.0(2014年5月6日)开始,vagrant提供了每次启动VM(使用vagrant up)后都运行特定provisioner的选项。

在您的 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",这将强制Vagrant始终运行配置程序,与Chef或者Puppet等其他任何配置系统一样有效。

在尝试了约10个小时将我的节点项目与vagrant一起使用upstart,我最终找到了解决方案。我尝试了钩子vagrant-mounted事件,但这最终是唯一的解决方案。 - Austin Pray
是的,我也尝试过使用 vagrant-mounted,但就是无法让它正常工作。现在我用这个解决方案已经很顺利了,效果相当不错。 - Zauberfisch
1
在Vagrantfile文件的最后一个"end"之前添加了"inline"版本。运行成功! - Bobby Tables
4
这个回答应该被采纳。在CentOS 7基础镜像中,config.vm.provision "shell", inline: "systemctl restart httpd", run: "always"对我有效。 - SpongeBobPHPants

4
我想对Zauberfisch的回答(Apache fails to start on Vagrant)做一些补充。

What needed to happen was this command needed to be run as a superuser AKA 'Sudo' so this was the command that was needed:

`config.vm.provision "shell", inline: "sudo service apache2 restart", run: "always"`

如果没有使用sudo,导致这个方法对你无效的原因似乎是Vagrant尝试在PATH中不包含/usr/sbin的情况下运行命令。对我而言,以下方法同样有效:

`config.vm.provision "shell", inline: "/usr/sbin/service apache2 restart", run: "always"`

3
如果已经安装了upstart(例如在Ubuntu中),Vagrant会发出“vagrant-mounted”事件。请参见https://serverfault.com/a/568033/179583,以了解具体情况。在脚本中,您可以启动或重新启动Apache服务器。

顺便说一句,我有种感觉,新版本的Apache只是发出警告,但即使文档根目录不存在,它仍然会启动。nginx也是如此。


启用upstart服务的另一个选项是在服务upstart conf中使用respawn limit 10 5。这将尝试以5秒的间隔最多重启服务10次。 - Tadas Sasnauskas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接