我在 Debian Wheezy 中遇到 LSB Init Scripts 的奇怪行为。我可以通过以下示例演示该问题:
该脚本在运行级别和中/etc/init.d/resolvconf
启动S
并停止。0
6
# Default-Start: S
# Default-Stop: 0 6
事实上,当我chkconfig resolvconf on
打开脚本时,我看到符号链接已在各自的运行级别目录中创建:
$ ls /etc/rc?.d/*resolvconf
/etc/rc0.d/K02resolvconf
/etc/rc6.d/K02resolvconf
/etc/rcS.d/S13resolvconf
当我使用 关闭脚本时chkconfig resolvconf off
,符号链接消失。到目前为止,一切都很好。
现在,我决定不要让脚本在 中启动S
(我将手动启动它),但我仍然希望它在 运行级别 中停止0
。6
我相应地更改了默认启动:
# Default-Start:
# Default-Stop: 0 6
并打开脚本chkconfig resolvconf on
。但什么也没发生。
$ ls /etc/rc?.d/*resolvconf
ls: cannot access /etc/rc?.d/*resolvconf: No such file or directory
尚未创建符号链接,并且脚本不会在运行级别0
和6
.
这里发生了什么?
如何让脚本仅在运行级别0
和中运行(停止) 6
,而不在 中启动S
?
更新
正如@Rui F Ribeiro 所建议的,我已经完全删除了该# Default-Start:
行。现在,当我运行时chkconfig resolvconf on
,我收到以下错误:
insserv: Script resolvconf is broken: incomplete LSB comment.
insserv: missing `Default-Start:' entry: please add even if empty.
insserv: Default-Start undefined, assuming empty start runlevel(s) for script `resolvconf'
不过,符号链接已创建。
$ ls /etc/rc?.d/*resolvconf
/etc/rc0.d/K02resolvconf
/etc/rc6.d/K02resolvconf
但为什么我会收到这些错误?
答案1
chkconfig
只读取“默认开始”行计算脚本的运行级别时。它计算运行级别的数量并且只计算调用的数量insserv
如果至少请求一个运行级别在“默认启动”中...
避免这种行为的解决方法包括:
- 启用服务
chkconfig -a
: - 禁用服务
chkconfig -d
; - 直接使用
insserv
、insserv service
来启用service
、insserv -r service
来删除它。