Назад | Перейти на главную страницу

apt-get upgrade - ошибка супервизора

У меня есть два сервера Ubuntu 16.04.2 LTS на AWS. Я хотел исправить их, но получаю сообщение об ошибке, и я не могу понять, что делать дальше.

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. Но я не знаю, имеет ли это значение для этого.

Я просмотрел список проблем руководителя, но не нашел никаких проблем, которые бы ко мне относились.

Похоже, что у вас уже установлен супервизор из другого источника. В 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 будет работать с последней версией libfoo перед обновлением libfoo. Если вы вложите это время сейчас, вам будет намного проще продолжать двигаться вперед.

В итоге, диагностируя проблему, я наткнулся на решение. @DerfK направил меня на верный путь. В конечном итоге даже после «удаления» супервизора и последующего исправления сервера он все еще был там. Это несмотря на то, что я изначально использовал apt-get для установки супервизора.

# 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

В итоге я правильно установил супервизор, но запуск был необычным, как намекал @DerfK. Итак, правильное решение заключалось в следующем:

  1. Избавьтесь от моих сценариев /etc/init.d/supervisor и /etc/init.d/supervisord
  2. sudo apt-get install supervisor
  3. После установки важно было пройти apt-get update, apt-get upgrade, apt-get dist-upgrade цикл после установки и до перезагрузки, иначе супервизор не запустится по какой-то причине.

Так что теперь все исправлено.