Centos

在 CentOS 6 下啟動時 httpd 服務不會啟動

  • March 22, 2016

我在配置 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 up或者vagrant reload當 VM 恢復時服務將不會啟動。

令人沮喪的是,我以完全相同的方式配置的 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

問題原來是虛擬機試圖在 Vagrant 掛載共享文件夾之前啟動 Apache 服務,並且 httpd DocumentRoot 指向一個不存在的目錄。我按照這些說明設置了一個 udev 事件,以等到掛載發生後再嘗試啟動 httpd。

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

如果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"

另請參閱:在 SO重新載入 Vagrant 後 Apache 不啟動

引用自:https://serverfault.com/questions/589683