为什么服务没有在安装时启动?


23

我现在已经看到过这种情况,但是在ubuntu管理员中找不到关于此特殊policy-rc.d二进制文件的任何信息,该二进制文件会阻止服务在被dpkg / apt调用时启动/重新启动/停止,因此我想知道这是什么原因。

Setting up lxc (0.9.0-0ubuntu3.6) ...
invoke-rc.d: policy-rc.d denied execution of start.
invoke-rc.d: policy-rc.d denied execution of start.
invoke-rc.d: policy-rc.d denied execution of start.

显然,没有软件包拥有此二进制文件:

dpkg -S /usr/sbin/policy-rc.d
dpkg-query: no path found matching pattern /usr/sbin/policy-rc.d

Answers:


31

该“脚本”包含在sysv-rc包装中。这是Debian策略的一部分,该策略使sysadmins可以在安装/升级/卸载软件包时控制启动/重新启动/停止哪些服务:

POLICY-RC.D策略层(/usr/sbin/policy-rc.d)接口:

大多数Debian系统不会使用此脚本,因为对策略层的需求不是很常见。大多数使用chroot jails的人只需要一个单行脚本,该脚本返回被监禁的/usr/sbin/policy-rc.d脚本的退出状态101。

/usr/sbin/policy-rc.d文件必须由提供该文件的任何软件包通过替代系统(/ usr / sbin / update-alternatives)进行管理。

/usr/sbin/policy-rc.d [选项] []

/usr/sbin/policy-rc.d [options] --list [...]

来源

那么,这里发生了什么?好吧,只要存在此脚本,它将返回一个代码,该代码说明本地系统的当前策略(默认情况下101=策略禁止的操作)。如果要更改策略,只需将文件作为根修改为以下任何值:

  0 - action allowed
  1 - unknown action (therefore, undefined policy)
 100 - unknown initscript id
 101 - action forbidden by policy
 102 - subsystem error
 103 - syntax error
 104 - [reserved]
 105 - behaviour uncertain, policy undefined.
 106 - action not allowed. Use the returned fallback actions
       (which are implied to be "allowed") instead. 

该脚本仍然是占位符,但是完成后可以返回所有这些值。如果你想允许任何变化只是改变exit 101exit 0,做。每当您安装/删除/升级服务时,这些服务都会(重新)启动/停止。


6
Docker映像已修复exit 101 # For most Docker users, "apt-get install" only happens during "docker build", # where starting services doesn't work and often fails in humorous ways. This # prevents those failures by stopping the services from attempting to start.
Tjorriemorrie

2
@Tjorriemorrie请您详细说明吗?我在构建docker映像时遇到了这个问题,但似乎无法修复
Jonny Flowers



@Bigood:行号在最近的master分支中已更改。这是[到Docker源代码中的行的永久链接(github.com/moby/moby/blob/v17.05.0-ce/contrib/mkimage/…)。
Hosam Aly
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.