我正在尝试使用Vagrant设置一个简单的开发环境。基础镜像(由我创建)带有CentOS 6.5 64位、Apache和MySQL。
问题是,当我重新加载虚拟机(vagrant reload
或vagrant halt
然后up
)后,httpd服务不会在启动时自动启动。
该问题仅在运行更改DocumentRoot
的provision脚本后第一次关闭机器后出现。
更多信息:
httpd在2、3、4和5级上都处于chkconfig
状态。
错误日志(在/etc/httpd/logs
中)没有写入任何错误信息。
如果我通过ssh手动启动服务,则可以正常启动。
我在其他CentOS盒子上也遇到了同样的问题(例如在vagrantcloud.com上可用的chef/centos-6.5
),这就是为什么我创建了自己的盒子。
其他服务(如mysql)都能够正常启动,因此这是特定于apache的问题。
总结:
- httpd始终会在第一次启动时启动,即使有provision脚本(比如在vagrant destroy之后)
- 当我不运行provision脚本时,httpd始终会启动(但我需要它来设置DocumentRoot)
- 在更改DocumentRoot的provision脚本后第一次关闭机器后,httpd将不会启动(不确定是否是该问题的原因)。
这是我的Vagrantfile:
# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "centos64_lamp"
config.vm.box_url = "<url>/centos64_lamp.box"
config.vm.hostname = "machine.dev"
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.synced_folder ".", "/vagrant", owner: "root", group: "root"
config.vm.provision :shell, :path => "vagrant_files/bootstrap.sh"
end
我尝试创建所有者/组为root
和apache
的vagrant文件夹。与拥有者vagrant
相同的问题。
这些是我尝试的配置脚本(bootstrap.sh)。唯一想要它们做的是将DocumentRoot更改为vagrant文件夹。但都没有起作用。
尝试1
#!/usr/bin/env bash
sudo rm -rf /var/www/html
sudo ln -fs /vagrant/app/webroot /var/www/html
尝试2
#!/usr/bin/env bash
sudo cp /vagrant/vagrant_files/httpd.conf /etc/httpd/conf
sudo service httpd restart
第二次尝试的httpd.conf与默认配置相同,除了DocumentRoot路径不同。这个第二个选择可以让我使用vagrant up --provision
强制重启服务,但这应该是一个不必要的步骤。
还有什么其他方法可以尝试解决这个问题吗?谢谢。
sudo
,而是在基于Ubuntu的系统中使用exec service apache2 restart
。 - Erik