apt-get upgrade-主管错误

apt-get upgrade-主管错误

我在 AWS 上有两个 Ubuntu 16.04.2 LTS 服务器。我想修补它们,但出现错误,我不知道下一步该怎么做。

sudo apt-get upgrade 给我:

Setting up supervisor (3.2.0-2ubuntu0.1) ...
insserv: script supervisor: service supervisor already provided!
insserv: exiting now!
update-rc.d: error: insserv rejected the script header
dpkg: error processing package supervisor (--configure):
 subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
 supervisor
E: Sub-process /usr/bin/dpkg returned an error code (1)

根据其他类似的错误,我尝试过:

sudo apt-get clean && sudo apt-get autoremove 
sudo apt-get -f install
sudo dpkg --configure -a

这些服务器远非“干净”。它们是作为副本创建的。在软件方面,它们有 PHP 7.0、Laravel,并在主管下运行 Laravel 队列。但我不知道这对这是否重要。

我查看了主管问题列表,但没有发现任何与我相关的问题。

答案1

看来您已经通过其他来源安装了 Supervisor。该insserv程序管理启动脚本,但无法注册此包的副本,supervisor因为它已经有一supervisor组要启动的脚本。请查看

grep Provides /etc/init.d/*

并查看哪些脚本声称提供主管。

至于如何修复这个问题,你需要找到现有程序的来源supervisor,并以相同的方式更新它。如果你运行它,dpkg -S /etc/init.d/filename它会告诉你它是否来自其他包(也许你从将监督器与另一个包捆绑在一起的 PPA 中安装了某些东西?),如果没有出现任何结果,那么现有监督器很可能是从二进制下载手动安装的,或者从源代码构建的。

另一个选项是启动一个干净的 16.4 映像并(如果您想要 php7.1 而不是 7.0,或者需要 16.4 中没有的其他软件)找到包含您需要的软件版本的维护 PPA。记录您安装的所有内容,包括您安装的版本以及您从哪里获得它们(特别是如果它是在没有软件包的情况下安装的),并测试您的软件是否可以在映像上运行。您还需要跟踪依赖项,特别是需要给定包的依赖项。这在使用时不太重要,apt但如果您手动构建东西,您需要记住在升级之前检查是否app可以与最新版本的兼容。现在投入这段时间将使以后的维护变得更加容易。libfoolibfoo

答案2

所以结果是,在诊断问题时,我偶然发现了解决方案。@DerfK 让我走上了正确的道路。结果是,即使在“删除”supervisor 并修补服务器后,它仍然存在。尽管我首先使用 apt-get 安装 supervisor,但情况仍然如此。

# removed it    
sudo apt-get remove supervisor

# patched it
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt autoremove

# after a reboot, this still lists it as running 
service --status-all

编辑#2 这提醒了我为什么在构建服务器时保留详细的笔记很重要。我发现了一条笔记,上面写着:

created a supervisord from https://raw.githubusercontent.com/Supervisor/initscripts/master/ubuntu
-Note: This should not have been necessary.  supervisor is supposed to run on startup, but it wasn't
sudo chmod +x /etc/init.d/supervisord
sudo update-rc.d supervisord defaults

所以最终我确实以正确的方式安装了 Supervisor,但启动过程却异常,正如 @DerfK 所暗示的那样。因此,正确的解决方法是:

  1. 删除我的 /etc/init.d/supervisor 和 /etc/init.d/supervisord 脚本
  2. sudo apt-get 安装主管
  3. 安装后,重要的是要完成apt-get 更新、apt-get 升级、apt-get dist-upgrade安装后和重新启动或主管由于某种原因无法启动之前循环。

现在一切都已解决。

相关内容