Apache无法在Vagrant上启动

时间:2014-02-06 10:09:58

标签: apache ubuntu apache2 virtualbox vagrant

在我的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所述。但我想知道是否有更好的解决方案。

3 个答案:

答案 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"`