Nginx не запустится после обновления Ubuntu (16.04)

Я недавно обновил свой сервер Ubuntu до выпуска 16.04. С тех пор я не могу запустить службу nginx.

Результаты service nginx restart:

Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.

Что говорит мой системный журнал (cat /var/log/syslog):

May 20 17:03:53: Stopped A high performance web server and a reverse proxy server.
May 20 17:03:53: Starting A high performance web server and a reverse proxy server...
May 20 17:03:53: nginx.service: Failed at step EXEC spawning /usr/sbin/nginx: No such file or directory
May 20 17:03:53: nginx.service: Control process exited, code=exited status=203
May 20 17:03:53: Failed to start A high performance web server and a reverse proxy server.
May 20 17:03:53: nginx.service: Unit entered failed state.
May 20 17:03:53: nginx.service: Failed with result 'exit-code'.

Результаты cat /lib/systemd/system/nginx.service:

# Stop dance for nginx
# =======================
#
# ExecStop sends SIGSTOP (graceful stop) to the nginx process.
# If, after 5s (--retry QUIT/5) nginx is still running, systemd takes control
# and sends SIGTERM (fast shutdown) to the main process.
# After another 5s (TimeoutStopSec=5), and if nginx is alive, systemd sends
# SIGKILL to all the remaining processes in the process group (KillMode=mixed).
#
# nginx signals reference doc:
# http://nginx.org/en/docs/control.html
#
[Unit]
Description=A high performance web server and a reverse proxy server
After=network.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
# Use TERM instead of QUIT to prevent Nginx from leaving stale Unix socket and failing the next start (https://trac.nginx.org/nginx/ticket/753)
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry TERM/5 --pidfile /run/nginx.pid
# Give Passenger a chance to clean up before being killed by systemd.
ExecStop=/bin/sleep 1
TimeoutStopSec=5
KillMode=mixed

[Install]
WantedBy=multi-user.target

Там действительно нет файла в /usr/sbin/nginxвот я и попробовал apt install nginx, но вот результат:

Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 nginx : Depends: nginx-core (>= 1.10.0-0ubuntu0.16.04.4) but it is not going to be installed or
                  nginx-full (>= 1.10.0-0ubuntu0.16.04.4) but it is not going to be installed or
                  nginx-light (>= 1.10.0-0ubuntu0.16.04.4) but it is not going to be installed or
                  nginx-extras (>= 1.10.0-0ubuntu0.16.04.4) but it is not going to be installed
         Depends: nginx-core (< 1.10.0-0ubuntu0.16.04.4.1~) but it is not going to be installed or
                  nginx-full (< 1.10.0-0ubuntu0.16.04.4.1~) but it is not going to be installed or
                  nginx-light (< 1.10.0-0ubuntu0.16.04.4.1~) but it is not going to be installed or
                  nginx-extras (< 1.10.0-0ubuntu0.16.04.4.1~) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

Как новичок, я довольно потерян в этом беспорядке, и мне действительно нужно немного помочь.

Большое спасибо за уделенное время.

Обновление 1:

Результаты apt-cache policy nginx:

nginx:
  Installed: 1.12.0-1+xenial1
  Candidate: 1.12.0-1+xenial1
  Version table:
 *** 1.12.0-1+xenial1 500
        500 http://ppa.launchpad.net/nginx/stable/ubuntu xenial/main amd64 Packages
        500 http://ppa.launchpad.net/nginx/stable/ubuntu xenial/main i386 Packages
        100 /home/var/lib/dpkg/status
     1.10.0-0ubuntu0.16.04.4 500
        500 http://ubuntu.mirrors.ovh.net/ftp.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
        500 http://ubuntu.mirrors.ovh.net/ftp.ubuntu.com/ubuntu xenial-updates/main i386 Packages
        500 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu xenial-security/main i386 Packages
     1.9.15-0ubuntu1 500
        500 http://ubuntu.mirrors.ovh.net/ftp.ubuntu.com/ubuntu xenial/main amd64 Packages
        500 http://ubuntu.mirrors.ovh.net/ftp.ubuntu.com/ubuntu xenial/main i386 Packages

1 ответ

Решение

Итак, у вас есть две вещи, которые находятся в конфликте, и это приводит к тому, что двоичные файлы nginx как-то исчезают: версия репозитория Xenial и NGINX PPA. Как сопровождающий, позвольте мне объяснить конфликт.

В Xenial мы выпустили 1.10.0 сразу после выпуска в качестве обновления. Это обновление подтолкнуло нас к "стабильной" ветке, но не было встроенных динамически загружаемых модулей. Это было связано со временем, но также создавало конфликты, возникшие во время тестов. В итоге мы получили поддержку динамического модуля в Zesty.

В PPA мы всегда клонировали непосредственно из Debian. Это означает, что у нас всегда была поддержка "динамического модуля" в Debian, которая конфликтовала с пакетами Xenial и приводила к некоторым конфликтам при установке и обновлении.


Здесь небольшой конфликт - вы не можете смешивать и сочетать nginx-core (это вариант по умолчанию, установленный для nginx пакет в Ubuntu) и PPA, как это иногда заставляет вещи исчезнуть. Проблема здесь в том, что нам нужно удалить существующий пакет Ubuntu, а затем установить его только из PPA.

Чтобы решить эту проблему, сначала необходимо создать резервную копию конфигураций nginx, которые вы хотите сохранить для своих сайтов. То есть, сделайте копию своего каталога /etc/nginx/sites-available/ где-то еще (даже в домашнем каталоге вашего пользователя все в порядке, нам просто нужна копия конфигурации сайта). Кроме того, нам понадобится резервная копия данных вашего веб-сайта, поэтому скопируйте ее также куда-нибудь еще (НЕ в стандартном docroot, чтобы он не испортился).

Как только вы сделаете копию, вам придется удалить существующие пакеты nginx. Это можно сделать с помощью следующей команды:

sudo apt-get remove nginx nginx-common nginx-doc nginx-core nginx-full nginx-extras nginx-light

Как только это будет завершено, запустите sudo apt-get update еще раз, чтобы убедиться, что у нас самые свежие версии нумерации.

Затем установите nginx из ППА - sudo apt-get install nginx nginx-full nginx-common должен сделать это.

Вы больше не должны получать ошибки при запуске. Убедитесь, что настройки вашего сайта все еще на месте и не перезаписаны. Если они сделали, восстановите из резервных копий, которые мы взяли ранее из конфигурации сайта и данных сайта. В противном случае, все готово.

Другие вопросы по тегам