如何阻止Apache2在启动时自动启动?

如何停止Apache2在启动时自动启动?我似乎找不到禁用自动启动的选项。

1也许有人可以更具体一些,但我可以指你朝正确的方向前进...在/etc目录下,有rc*.d的目录,其中包含所有的启动/停止脚本,被称为初始化脚本。你会看到链接到/etc/init.d中的脚本,并以"k"或"s"开头,分别代表"kill"(杀死)或"start"(启动),后面跟着一个排序号码。 - Marty Fried
是的,我知道/etc/rcX.d目录,但我搜索它是为了找到比手动重命名文件更好的工具(生命太短暂了)。update-rc.d填补了这个空白。 - Tomasz Gandor
4个回答

你可以通过以下方式简单地禁用它:
sudo update-rc.d apache2 disable

如果您想再次启用它:
sudo update-rc.d apache2 enable

根据我正在进行的项目,如果我希望重新启用它,方便地拥有该服务是很方便的。

4enable 给了我一个错误,像是 runlevel arguments (none) do not match LSB Default-Start values,但是 sudo update-rc.d apache2 defaults 似乎成功重新启用了它。 - here
2@这里 sudo update-rc.d apache2 enable 对我来说正常运行了 - George Pligoropoulos
1在Ubuntu Trusty上,它告诉我“禁用|启用的API不稳定,可能会在将来发生变化。” - Tanner
1无法工作 - 错误:没有运行级别符号链接可修改,中止!。然而,apache2正在运行并自动启动。 - Daniel Kmak
不再起作用:update-rc.d: 错误:没有要修改的运行级别符号链接,请中止! - TomDogg
"禁用"和"移除"之间有什么区别? - Incerteza
@AlexanderSupertramp 嗯,使用systemd,disable会阻止服务在启动时自动启动,而mask则通过创建到/dev/null的符号链接来完全禁用该服务。 - mchid
@jutky 有人能解释一下为什么这个比tomodachi的答案更好吗?因为那里的评论说,如果你想保留apache2,就需要使用-f选项。 - nealmcb
@nealmcb 没有个人恶意,但是对我来说,“禁用”听起来比“移除”更不危险。 - jutky
如果遇到update-rc.d: error: no runlevel symlinks to modify, aborting!错误,请重新创建以下缺失的符号链接,然后重试: /etc/rc0.d/K01<service> /etc/rc1.d/K01<service> /etc/rc2.d/S99<service> /etc/rc3.d/S99<service> /etc/rc4.d/S99<service> /etc/rc5.d/S99<service> /etc/rc6.d/K01<service> - Amil Waduwawara

在旧的、没有systemd的发行版中,在/etc/init.d/目录下,您会找到所有不同启动服务的初始化脚本,如apache2、networking等。
根据计算机启动的运行级别不同,会启动不同的服务。 因此,从/etc/init.d/文件夹中,每个"service"都链接到一个/多个/没有命名为rc0.drc6.d的运行级别文件夹。
为了简化事务,有一个工具可以删除/添加这些链接,从而删除或添加启动脚本。 要禁用apache2,只需键入:
sudo update-rc.d apache2 disable

这将禁用apache2的启动,但不会删除它,因此可以再次启用。要删除apache2的启动脚本,请执行以下操作:
要删除apache2,只需键入:
sudo update-rc.d -f  apache2 remove

###这样做将导致所有与apache2链接的运行级别文件夹被删除。

2chkconfig也可以帮上忙 - "chkconfig {service_name} off" - MCR
不再起作用了:您正在尝试调用的脚本已被转换为Upstart作业,但lsb-header不支持Upstart作业。(...) - TomDogg
2@TomDogg,你能具体说明你使用的版本吗?这个答案适用于Ubuntu 14.04.3上的Apache 2。 - Dale C. Anderson
值得注意的是,这里的“-f”表示“即使/etc/init.d/name仍然存在,也强制删除符号链接。” 换句话说,“如果你要保留Apache2安装,就必须按照tomodachi的说法来做。” 如果没有使用“-f”,就意味着你已经卸载了Apache 2,结果会出现错误。 - Dale C. Anderson
1如何恢复服务? - Eugen Konkov
12警告!这将删除服务!请使用sudo update-rc.d apache2 disable - Eduardo Cuomo
您可能先停止它,然后再禁用它。sudo service apache2 graceful-stop - smac89

使用systemd,我们现在可以使用systemctl命令来阻止服务在启动时自动启动。
以下是一个示例:
sudo systemctl disable apache2

你仍然可以启动和停止服务,但它不会在开机时自动启动。

在Linux Mint(基于Ubuntu)中,这个不存在,也无法通过apt-get install systemd安装。这可能意味着该软件包缺失、已过时或只能从其他来源获取。然而,以下软件包可以替代它: systemd-services systemd-services:i386 - dragonmnl
2Linux Mint仍然基于Ubuntu 14.04。Ubuntu从15.04开始使用systemd。 - twan163
1@dragonmnl 正如twan163所说,systemd适用于更新的版本(debian jessie或更高版本)。 - mchid
要搜索可用的软件包,请运行以下命令:apt-cache search systemd | grep systemd - mchid
1这在Debian上运行得很好。 - Anupam
1Debian 9+的正确答案是: - John
1如果遇到update-rc.d:错误:没有运行级别符号链接可修改,正在中止! ,请重新创建任何缺失的符号链接;然后重试: /etc/rc0.d/K01<service> /etc/rc1.d/K01<service> /etc/rc2.d/S99<service> /etc/rc3.d/S99<service> /etc/rc4.d/S99<service> /etc/rc5.d/S99<service> /etc/rc6.d/K01<service> - Amil Waduwawara
谢谢!我用XAMPP进行开发目的。当我从Ondrej PPA安装了PHP7.3(用于与Composer一起使用),Apache2开始在系统启动时启动,与XAMPP的内置HTTPD发生冲突。您提出的解决方案对我有效:运行sudo systemctl disable apache2并重新启动后,Apache不再在启动时启动,因此XAMPP的内置HTTPD可以像之前一样正常工作。谢谢!(Ubuntu 18.10) - whyer
我为sshd做了这个操作,现在它不再自动启动,但是我也无法使用sudo systemctl start sshd手动启动它,因为出现了Failed to start sshd.service: Unit sshd.service not found.的错误。通过重新安装解决了这个问题。 - Carolus

我只是想补充一下@gsullins和@tomodachi的答案,供以后使用的读者参考。
如果你已经使用过:
sudo update-rc.d apache2 remove

你可以使用参数defaults将apache2添加到自动启动中。
sudo update-rc.d apache2 defaults

然后你可以启用/禁用
sudo update-rc.d apache2 disable
sudo update-rc.d apache2 enable