У меня есть два сервера 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. Итак, правильное решение заключалось в следующем:
Так что теперь все исправлено.