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


31

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

(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)

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


2
如果您尝试过apt-get install (something)并且像我一样收到此错误消息,那么对我来说解决方案是apt-get upgrade (something)
PJ Brunet

Answers:


30

该消息是通用的。这仅表示dpkgapt/ 调用的实例apt-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-like系统中,控制init脚本的二进制文件失败了。它失败了,因为它找不到/etc/init.d/mongodb脚本。这不好。我们需要创建它或从其他地方复制它,以便它再次开始工作。通常,重新安装软件包也是file not found错误的一种选择。

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

那么,您究竟需要什么帮助?理想情况下,问题的完整输出。这也有利于包括输出sudo dpkg -Csudo apt-get check和输出apt-cache policy package1 package2...的包,其中“包1包2 ......”包括所有有问题的。


作为诊断消息,如果您阅读了整个错误(处理时遇到错误:mongodb-10gen),这将
很有帮助,

1
@mchid但是是什么导致了错误?它不会给您一目了然的线索。
Braiam

@mchid是的,如果我刚刚阅读,我怎么能知道Errors were encountered while processing: mongodb-10gen呢?实际上,要解决问题,那条线是毫无价值的
Braiam 2015年

糟糕的是,我以为您只是在寻找解决问题的方法(“有可能解决它”),我想我是出于上下文考虑。
mchid

顺便说一句,运行sudo touch /etc/init.d/mongodb,然后再运行sudo apt-get purge mongodb-10gen以解决问题。我对此进行了测试,只要文件存在(/etc/init.d/mongodb),即使文件为空,dpkg仍会继续进行操作(创建一个空文件)。
mchid
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.