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

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

foo我有一个当前在运行级别启动的服务3及以上。我怎样才能阻止它这样做,而不使用update-rc.d foo stop 3 .,如果我理解正确的话,它会在每次运行级别更改时关闭服务。

(即,如果我处于运行级别1并启用foo,然后当我改变运行级别3它会被禁用,不是吗?

运行 Debian GNU/Linux Lenny。

答案1

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

如果你只想从单个运行级别中删除服务/守护进程,update-rc.d正如 bei 指出的那样自由或者只需删除符号链接来自/etc/rcX.d/,其中 X 是您的运行级别。如果您不想让服务自动启动,update-rc.d -f foo remove就可以了。

答案2

使用 sysv-rc-conf 配置 Linux 启动应用程序

apt-get install sysv-rc-conf

正如其他人指出的那样,这里也是更新-rc.d用于cmd行。

例如,运行

update-rc.d apache2 disable

从所有运行级别禁用 apache2。

答案3

短的:

没有可靠的方法可以快速完成此操作。

长的:

当前的 Debian(截至 2012-06-01 不稳定的 Debian)目前没有可靠的简便方法来一致地禁用服务/守护进程。——因为守护进程包的升级无条件运行“/etc/init.d/package restart”,无论是否在此运行级别禁用它。

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

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

Debian 中的 init 脚本有/曾经有某些 init-policy-something 步骤,旨在填补这一缺失的功能。——我尝试使用它,发现它很复杂,发现了一个 bug,之后就再也没有碰过它。

更新:

切换到“systemd”,它是“initd”的替代品。有一个 debian 包,你可以用下面的方法禁用服务:

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

答案4

我不明白你想实现什么目标。

您希望 foo 在什么运行级别下运行?

如果您希望它始终运行,请使用update-rc.d foo defaults;这将在 0、1 和 6 中停止它,同时在 2、3、4 和 5 中保持它运行。(1 除了 shell 之外不应该运行任何其他程序,0 和 6 是停止和重新启动)

如果您想准确指定在哪个运行级别运行:

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

相关内容