每次我重新启动 Scientific Linux 机器时,我都会遇到无法启动 Apache Web 服务器(httpd
)的问题。
我必须用此代码手动完成此操作:
[vagrant@magento ~]$ sudo service httpd restart
Stopping httpd: [FAILED]
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[ OK ]
我在装有 Ubuntu 12.04 Server 的 Vagrant 盒上进行了类似的设置,可以正确启动 httpd 服务,那么让 Scientific Linux Apache 服务器自动启动 httpd 的线索是什么呢?
每次我在命令提示符中使用命令:时vagrant reload
,Web 服务器都不会启动 httpd 服务,我必须使用重新启动命令 ( sudo service httpd restart
) 来启动它。但我希望该功能像我之前的 Ubuntu 12.04 (precise64) 一样自动运行。因此,决定性因素不是失败和正常消息之间的界线,问题在于它在重新启动后处于失败状态。
更新:立即尝试了您的好主意!但我确定所有 3 个运行级别 (3、4、5) 都已处于 ON 状态。这是我的当前状态:
34 [vagrant@example ~]$ chkconfig --list
35 crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
36 htcacheclean 0:off 1:off 2:off 3:off 4:off 5:off 6:off
37 httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
38 ip6tables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
39 iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
40 lvm2-monitor 0:off 1:on 2:on 3:on 4:on 5:on 6:off
41 mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
42 netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off
43 netfs 0:off 1:off 2:off 3:on 4:on 5:on 6:off
44 network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
45 postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off
46 rdisc 0:off 1:off 2:off 3:off 4:off 5:off 6:off
47 rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
48 saslauthd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
49 sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
50 udev-post 0:off 1:on 2:on 3:on 4:on 5:on 6:off
51 vboxadd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
52 vboxadd-service 0:off 1:off 2:on 3:on 4:on 5:on 6:off
53 vboxadd-x11 0:off 1:off 2:off 3:on 4:off 5:on 6:off
54 [vagrant@magento ~]$ chkconfig --list | egrep '(apache|httpd)'
55 httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
答案1
我们也遇到了同样的问题。对我们来说,这是由于 Apache 依赖于 Vagrant 挂载的共享文件造成的。这导致 Apache 在加载过程中失败。
在以前版本的 Vagrant 中,配置脚本总是在启动/重启时运行,因此在连接网络共享后 Apache 就会重新启动。
答案2
我在使用 vagrant 设置开发环境时也遇到了同样的问题。
我认为您的 documentRoot 条目之一位于共享驱动器上。由于 vagrant 在启动后挂载这些条目(而 apache 是在启动之前启动的),因此 apache 服务无法启动(缺少文档根目录)
我能够使用网上的这个教程来解决这个问题。就我个人而言,我最终使用了 SysVInit 方法,因为我无法使用 upstart 来做到这一点。你可以轻松地将其移植到 SystemD 你只需要更改/etc/init.d/httpd [command]
为systemctl [command] http.service
你也可以使用service httpd start
http://razius.com/articles/launching-services-after-vagrant-mount/
杰伦·埃德
答案3
听起来,问题在于执行“vagrant reload”后,Apache 默认不会“打开”。我相信“vagrant reload”模拟了“关闭电源循环”虚拟机时发生的情况。听起来你希望在虚拟机启动后运行 Apache 守护进程。
我访问了 Scientific Linux 网站。它指出底层发行版基于“Enterprise Linux”。我通常会将其解释为“RedHat Enterprise Linux”。如果这是不正确的,请告诉我。
根据操作系统的运行级别打开/关闭服务的方式通常通过“chkconfig”来处理。我首先会确认哪些服务是打开和关闭的。
chkconfig --list
您应该会得到大量的输出,其中包含如下所示的行:
gpm 0:off 1:off 2:off 3:off 4:off 5:off 6:off
第一列是服务的名称,随后的列包含成对的值<runlevel>:<on|off>
。因此,在上面这一行中,gpm
服务在所有运行级别上都处于关闭状态。
如果我是你,我会过滤输出并在服务列表中寻找“httpd”或“apache”:
chkconfig --list | egrep '(apache|httpd)'
在我的 RHEL 盒子上我得到以下信息:
httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
默认运行级别通常为“3”。然后,我将针对运行级别 3、4 和 5 将此服务设置为“开启”,如下所示:
chkconfig --level 345 httpd on
即使完成此操作,如果在启动虚拟机时该服务处于关闭状态,您仍然需要手动重新启动该服务:
service httpd start
指令警告ServerName
可以忽略,但如果您想实际查看 VM 提供的 Web 内容,您最终必须手动指定在配置 VM 时为其指定的 IP 地址。我会查阅 Vagrant 文档的“私有网络”部分。
希望这可以帮助!