2014-02-06 76 views
12

在我的Vagrant环境中,我有一个guest虚拟机Ubuntu Virtualbox,带有默认设置的LAMP。Apache无法启动Vagrant

我的主机上的源代码与我的流浪文件在同一个文件夹中。因此,对客人的Ubuntu我可以访问这些文件在安装/vagrant DIR这样

/vagrant 
    /mysite 
    /index.php 
    /Vagrantfile 

现在在我的Apache的配置我增加一行

Alias /mysite /vagrant/mysite 

重装配置和重新启动Apache的我可以去后localhost:8558/mysite/index.php,它的工作原理。

问题是,当我重新加载VirtualBox vagrant reload它启动Apache服务之前安装/vagrant文件夹。所以Apache无法找到别名目录并无法启动。我必须手动启动它然后

我的问题是 - 有没有办法延迟Apache启动,以便在安装后启动?

更新:作为一种解决方法,我添加了脚本到启动后30秒启动apache的crontab,如here所述。但我想知道是否有更好的解决方案。

回答

3

如果安装了upstart(如Ubuntu),Vagrant会发出“vagrant-mounted”事件。请参阅https://serverfault.com/a/568033/179583以了解该想法。在你的脚本中,你可以(重新)启动Apache服务器。

顺便说一句,我有一种感觉,即新的Apache版本只是警告,但即使doc根目录不存在仍然开始。与nginx一样。

+0

为新贵启用服务的另一个选项是在服务使用新贵['重生限制10 5'(http://upstart.ubuntu.com/cookbook/#respawn) CONF。这将尝试以5秒为间隔再次启动服务10次。 –

22

虽然暴发户可能是一个有效的选择,我有几个问题与流浪使用它。我不得不运行一些需要作为特权用户运行的任务,而我没有设法与暴发户合作。

从版本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",这将迫使流浪汉始终运行在供应方,这显然作品一样好与像厨师或木偶任何其他供应系统。

+0

花了大约10个小时试图让我的节点项目在无业游民中得到初级工作,这最终成为我的解决方案。我试图勾住'vagrant-mounted'事件,但这最终成为唯一的解决方案。 –

+0

是的,我也尝试过'vagrant-mounted',但只是无法让它工作。我现在用这个解决方案航行很好,安静地工作。 – Zauberfisch

+1

在Vagrantfile的最后一个“结束”之前添加了“inline”版本。成功了! –

2

我想稍微增加Zauberfisch的答案(Apache fails to start on Vagrant

什么需要发生的是这个命令需要运行超级用户身份AKA“须藤”,所以这是很必要的命令:

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

为什么没有没有sudo为你工作的原因似乎是,流浪试图不/usr/sbinPATH运行命令。对于我来说,这个工作也很好:

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