CentOS 6 下 httpd 服务无法在启动时启动

CentOS 6 下 httpd 服务无法在启动时启动

我在配置 CentOS 6 Vagrant 设置以在启动时启动 Apache 服务时遇到问题。我尝试使用 chkconfig,但操作系统似乎忽略了它。

当我跑步时sudo chkconfig --list httpd,我得到

httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off

我认为这是运行命令的结果

sudo chkconfig httpd on
sudo chkconfig --levels 235 httpd on
sudo chkconfig --levels 345 httpd on

尝试在不同的配置脚本中正确配置此内容。我没有使用 Puppet 或 Chef,也不想使用。我曾在另一台主机上运行过,但在第二台主机上,它似乎因某种原因停止了工作。

手动启动服务sudo service httpd start可以正常工作,但只要我执行vagrant halt && vagrant upvagrant reload当虚拟机重新启动时服务就不会启动。

令人沮丧的是,我以完全相同的方式配置的 mysqld 服务在启动时运行正常。

我的 /var/log/httpd/error_log 显示以下内容:

[Thu Apr 17 09:31:09 2014] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Thu Apr 17 09:31:09 2014] [notice] Digest: generating secret for digest authentication ...
[Thu Apr 17 09:31:09 2014] [notice] Digest: done
[Thu Apr 17 09:31:09 2014] [notice] Apache/2.2.15 (Unix) DAV/2 PHP/5.5.11 configured -- resuming normal operations
[Thu Apr 17 09:34:45 2014] [notice] caught SIGTERM, shutting down

答案1

问题原来是 VM 在 Vagrant 挂载共享文件夹之前尝试启动 Apache 服务,而 httpd DocumentRoot 指向一个不存在的目录。我按照这些说明设置了一个 udev 事件,以等待挂载发生后再尝试启动 httpd。

http://razius.com/articles/launching-services-after-vagrant-mount/

答案2

如果httpd打开chkconfig并且语法正确,则可能是您的 Apache 文档根目录指向同步文件夹,该文件夹在启动服务时不可用。

解决方法是提供 shell 脚本,Vagrantfile该脚本将检查服务并在每次vagrant调用命令时根据需要启动,例如

config.vm.provision :shell, run: "always", :inline => "service httpd status || service httpd start"

或者:

config.vm.provision :shell, run: "always", path: "scripts/check_vm_services.sh"

也可以看看:Vagrant 重新加载后 Apache 无法启动在 SO

相关内容