“E: 子进程 /usr/bin/dpkg 返回错误代码 (1)” 这是什么意思?

“E: 子进程 /usr/bin/dpkg 返回错误代码 (1)” 这是什么意思?

每当有人在安装、升级或删除某些软件时遇到问题时,我都会多次看到此消息,但我想知道,这是什么意思,更重要的是,有可能解决吗?

(Reading database ... 81657 files and directories currently installed.)
 Removing mongodb-10gen ...
 arg: remove
 invoke-rc.d: unknown initscript, /etc/init.d/mongodb not found.
 dpkg: error processing mongodb-10gen (--remove):
  subprocess installed pre-removal script returned error exit status 100
 invoke-rc.d: unknown initscript, /etc/init.d/mongodb not found.
 dpkg: error while cleaning up:
  subprocess installed post-installation script returned error exit status 100
 Errors were encountered while processing:
  mongodb-10gen
 E: Sub-process /usr/bin/dpkg returned an error code (1)

(以上只是一个例子,不是我的实际问题)

答案1

该消息是通用的。它只是意味着/dpkg调用的实例由于某种原因失败了。它没有解释原因、如何解决,也没有给出解决方法的提示。作为诊断消息,它没有用。aptapt-get

您需要阅读消息之前的行(有时相当多),以找到阻止您完成安装的真正错误。

是啊,但是我该如何解决呢?

没有单一的方法可以解决它。发生这种情况的原因有很多,试图在一篇文章中列出所有原因是徒劳的。每一种情况对于该包/环境来说几乎都是独特的。

但是,还有救赎。您看到此消息的事实意味着该消息之前的行中可能有更多相关信息。为了说明目的,我将使用一个例子:

(Reading database ... 81657 files and directories currently installed.)
 Removing mongodb-10gen ...
 arg: remove
 invoke-rc.d: unknown initscript, /etc/init.d/mongodb not found.
 dpkg: error processing mongodb-10gen (--remove):
  subprocess installed pre-removal script returned error exit status 100
 invoke-rc.d: unknown initscript, /etc/init.d/mongodb not found.
 dpkg: error while cleaning up:
  subprocess installed post-installation script returned error exit status 100
 Errors were encountered while processing:
  mongodb-10gen
 E: Sub-process /usr/bin/dpkg returned an error code (1)

现在,要找到问题,您需要向后阅读:

  • E: Sub-process /usr/bin/dpkg returned an error code (1)没有告诉我任何有用的东西。所以继续前进。

  • Errors were encountered while processing: mongodb-10gen只是告诉我哪个包有问题。有用但还不够。

  • subprocess installed post-installation script returned error exit status 100:这告诉我失败的脚本是postinst安装后执行的脚本。这在某些情况下会很方便,但在这种情况下则不然。

  • dpkg: error while cleaning up:这里没有什么有用的。

  • invoke-rc.d: unknown initscript, /etc/init.d/mongodb not found.答对了!这告诉我们invoke-rc.d,在大多数类似 Debian 的系统中控制 init 脚本的二进制文件失败了。由于找不到/etc/init.d/mongodb脚本而失败。这不好。我们需要创建它或从其他地方复制它,以便它再次开始工作。重新安装软件包通常也是解决file not found错误的一个选项。

    在这种情况下,报告错误是没有必要的,因为我们很可能是删除脚本的人,但如果您完全确定您没有触及该文件(应该debsums -sla确认它),则报告错误。

那么,您到底需要什么来获得帮助呢?理想情况下,问题的完整输出。包含sudo dpkg -C和的输出sudo apt-get check以及其中“package1 package2 ...”的输出apt-cache policy package1 package2...包括所有有问题的包也很有帮助。

相关内容