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 .