禁止从所有运行级别启动服务?


61

我有一项foo当前从运行级别3和更高级别开始的服务。如何在不使用的情况下阻止它这样做update-rc.d foo stop 3 .(如果我理解正确的话),它将在每次运行级别更改时关闭服务。

(即,如果我处于运行级别1并启用foo,那么当我更改为运行级别3时将被禁用,不是吗?)

运行Debian GNU / Linux Lenny。

Answers:


57

“停止”一词不会阻止守护程序启动,而是在进入指定的运行级别时将其关闭。

如果你只是想从一个单一的运行级别删除服务/守护,update-rc.d如指出贝弗赖海特干脆删除符号链接/etc/rcX.d/,其中X是你的运行级别。如果您不希望该服务自动启动,update-rc.d -f foo remove请执行此操作。


2
有任何想法如何在Debian 8上做到吗?sudo update-rc.d -f sunrpc remove不起作用 重新启动后它仍然存在。

Debian 9这对我不起作用,然后我意识到,哦,derp,需要sudo。如果您忘记使用sudo,则update-rc.d不会提供任何反馈。我确认链接已消失ls /etc/rc*.d
Jason Dunkelberger '18

命令在Ubuntu上失败16.04
Stephane '18

确保传递正确的服务名称,如果update-rc.d不存在,则不会提供任何反馈。
marcovtwout 18/12/12

如果要稍后重新启用该怎么办?在@“ Not Now”下面的答案更好,因为您可以在之后禁用并重新启用。update-rc.d apache2 disable
Wadih M.


15

短:

没有可靠的方法可以快速执行此操作。

长:

当前的Debian(自2012年6月1日起Debian不稳定)目前尚无可靠的短期方法来始终禁用服务/守护程序。–因为守护程序软件包的升级无条件地运行“ /etc/init.d/package restart”,所以是否为此运行级别禁用了它。

为确保守护程序不会启动,您可以:

  • 卸载它
  • 对/etc/init.d/xyz脚本进行本地转移(这样,没有工具可以找到它)
  • 使用/滥用相应程序包的配置文件来引起该脚本的提前退出(例如,如果它来自init脚本,则在/ etc / default / xyz中提前放置一个“退出”)
  • 在该init脚本中查找不启动该守护程序的预定义“官方”方式

Debian中的init脚本有一些init-policy-something步骤,应该填补了这一缺失的功能。–我尝试使用它,发现它很复杂,发现了一个错误,再也没有碰过它。

更新:

切换到“ systemd”,替代“ initd”。存在一个debian软件包,您可以通过以下方式禁用服务:

cd /etc/systemd/system
ln -s /dev/null xyz.service

1
+1这是一个很有帮助的答案-如果我没发生过,那以后我会被ung住-谢谢!

你还可以unlink xyz.service吗?
jaggedsoft

@NextLocal,我忘记了为什么要写它,但是我相信如果服务具有System V初始化脚本,systemd将会使用它们。–因此该链接告诉它不要寻找它们。
罗伯·西默

请注意,编辑/etc/default/xyz文件以添加exit不会阻止打包程序在下次升级时使用正确的版本覆盖文件。(该软件包保存了配置文件,并且在大多数情况下不会这样查看init脚本。)因此,在大多数情况下这无济于事。
Alexis Wilke

Devuan急忙解决:它不使用systemd,而是使用经典的SysV rc.d / init.d系统(如果有人选择,还可以使用openrc)。
Csaba Toth

5

运行此命令

apt-get安装rcconf

安装后,在SSH中运行rcconf,您将收到一个对话框,显示所有设置为在引导时运行的服务。通过按Space禁用/启用特定项来选择那些项,然后完成操作,只需单击Ok,该服务就不会在下次启动时再次启动。使用多年。对于像我这样的Debian / Ubuntu用户非常方便的工具。


像1,2,3一样简单!感谢这个小命令行工具。
DanielaWaranie 2014年

2

我很困惑您要完成的工作。

您要foo进入哪个运行级别?

如果您始终希望它运行,请使用update-rc.d foo defaults; 这将使其在0、1和6中停止运行,而使其在2、3、4和5中运行。(除了外壳程序,其他1不应运行,0和6则停止并重新启动)

如果要确切指定要运行的运行级别:

update-rc.d foo stop 0 1 6 3 . start 2 4 5 .


1

从Debian7开始使用insserv

输出所有服务及其运行级别信息

insserv --showall

从所有运行级别中删除列出的脚本

insserv --remove [specify_script]


0

在基于Red Hat的系统上,您可以使用

chkconfig httpd off
chkconfig httpd --del

从运行级别删除服务器

在基于debian的系统上,所有服务都应该由/etc/rc?.d/目录中的文件启动,然后这些文件具有指向/etc/init.d/目录中相应文件的符号链接。如果您希望某个服务默认情况下不启动,则可以从/etc/rc?.d目录中重命名/删除该服务,并且只要其中一个启动链接仍出现在其中一个启动链接中,您的更改将保留在软件包升级中。其他(3,4和5)目录。或者,您可以使用update-rc.d命令更改链接,如果要在之后启动服务,则可以使用/etc/init.d/service_name start,如果将start保留在结尾,则会给您可以使用的选项,例如停止,重新启动,重新加载...

我认为您可以使用sysv-rc-conf禁用它。


问题被标记为Debian,而不是Fedora或Red Hat。

0
sudo update-rc.d SERVICE disable

如果要指定运行级别。

sudo update-rc.d SERVICE disable|enable [S|2|3|4|5]

请记住将服务更改为程序的名称。

sudo service SERVICE restart

0

为什么不将启动脚本备份到其他位置,然后将其删除到/etc/init.d/中?如果update-rc.d不起作用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.