很久以前,我安装了 Apache,作为在笔记本电脑上设置开发环境的一部分。
但是,自从几个月前我停止使用后,它就不再在启动时自动启动了。我家里的笔记本电脑和办公室的笔记本电脑都出现了这个问题。
这两种情况都是这样的,几个月前我在 Ubuntu 10.10 中安装了 Apache,使用了几个星期,没有出现任何故障,但后来有一天我停止了它,现在它不再自动启动了。我尝试手动运行更新 rc,但被告知 init 脚本已在使用中。
但是,使用以下方式手动启动/重新启动
sudo service apache2 start/restart
运行正常。在这两种情况下,我都让它等到升级到 11.04 之后,因为我希望新版本能解决这个问题。但事实并非如此!如果有人能告诉我如何让 Apache 再次自动启动,我将不胜感激。
答案1
尝试运行
update-rc.d apache2 enable [list of run levels]
以 root 身份运行。
您可能有兴趣阅读
man update-rc.d
答案2
我根据最近遇到的具有相同症状的问题添加了这个答案。
首先是一些背景数据:
- Ubuntu 使用
/etc/init.d/
文件夹中的脚本来启动/停止服务。 - Ubuntu 使用
/etc/init.d/
存储在文件夹中的这些脚本的符号链接/etc/rc#.d/
根据“运行级别”启动/停止服务。 - 以“S”开头的符号链接表示应该启动该服务。
- 以“K”开头的符号链接表示应该停止(终止)该服务。
- 运行级别 1 执行 中符号链接的脚本
/etc/rc1.d/
,运行级别 2 使用/etc/rc2.d/
,等等。 - Ubuntu 的默认运行级别是 2。
- Apache 的安装本质上是在运行
sudo update-rc.d apache2 defaults
,它会在文件夹中创建适当的符号链接/etc/rc#.d/
。
因此,似乎在我的服务器上,某个程序或某个人在某些时候运行sudo update-rc.d apache2 disable
,删除了所有“S”符号链接并将其替换为“K”符号链接。因此,在初始化任何运行级别时,Apache 会被终止或无法启动。
我的解决方案只是重新启用 Apache:
sudo update-rc.d apache2 enable
现在,Apache 在启动或切换运行级别时可以按预期启动/停止。
注意:
值得注意的是,仅仅sudo update-rc.d apache2 defaults
再次运行是不够的,因为它看到符号链接存在并认为它们是想要的。它只是回应:
System start/stop links for /etc/init.d/apache2 already exist.
答案3
在这种情况下,我发现了为什么 Apache 无法启动。我在启动日志中找不到这个问题的踪迹,只能在启动时打印到屏幕上的输出中找到。
但是现在你会看到:脚本的最后一行/etc/apache2/apache2.conf
失败了。
为什么?
它说:
Include sites-enabled/
但是,我设置的两个站点位于我自己的主目录中 - 该目录已加密!
因此,在启动时(Apache 启动期间)这些站点不存在,并且 Apache 失败并拒绝运行。
解决方案?
我创建了一个名为“disable_sites”的小脚本,并将其符号链接到/etc/rc0.d
并/etc/rc6.d
(关闭并重启):
#!/bin/bash
/usr/sbin/a2dissite vvsshop
/usr/sbin/a2dissite neoflex
/etc/init.d/apache2 reload
exit 0
我还编写了一个脚本,用于每次登录时重新启用网站,并将其作为启动程序添加到我的系统设置中。现在它可以正常工作了!
所以,我想这里的教训是,当 Apache 在启动过程中莫名其妙地无法加载并且您在日志中找不到任何错误时,或者在手动启动服务器时,请检查它所需的所有目录是否可用。这可能也可以通过其他方式解决。
答案4
我遇到了同样的问题,我在本地 Vagrant 设置上运行 Ubuntu 14。我删除了目录/etc/apache2/sites-enabled
并添加了指向我的主目录的链接,当然,根据 Vagrant 配置,该目录已安装到我的本地驱动器。
事实证明,apache 看不到目录,因为资源尚未挂载。我重写了 Vagrant 上的配置,只复制sites-enabled
目录,而不是添加符号链接。
我也sudo update-rc.d apache2 enable
按照建议进行了操作Karl Wilbur
,以确保 apache init 已启用。