Centos
在 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 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 不啟動