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

Bra*_*iam 24 upstart services sysv software-installation

我现在已经看到了这个,但是在 ubuntu man 中没有找到任何关于这个特殊的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.
Run Code Online (Sandbox Code Playgroud)

显然,没有包拥有这个二进制文件:

dpkg -S /usr/sbin/policy-rc.d
dpkg-query: no path found matching pattern /usr/sbin/policy-rc.d
Run Code Online (Sandbox Code Playgroud)

Bra*_*iam 32

这个“脚本”包含在sysv-rc包中。这是 Debian 政策的一部分,该政策允许系统管理员在安装/升级/卸载软件包时控制启动/重新启动/停止哪些服务:

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

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

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

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

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

来源

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

  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. 
Run Code Online (Sandbox Code Playgroud)

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

  • Docker 镜像有一个固定的 `exit 101` ```# 对于大多数 Docker 用户来说,“apt-get install”只发生在“docker build”期间,# 启动服务不起作用并且经常以幽默的方式失败。这 # 通过阻止服务尝试启动来防止这些失败。``` (6认同)
  • @Tjorriemorrie 请问你能详细说明一下吗?我在构建 docker 镜像时遇到了这个问题,我似乎无法修复它 (2认同)