Nginx wird seit dem Ubuntu-Upgrade (16.04) nicht mehr gestartet.

7

Ich habe kürzlich meinen Ubuntu-Server auf die Version 16.04 aktualisiert. Seitdem kann ich den Nginx-Dienst nicht mehr starten.

Ergebnisse von 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.

Was meine Systemprotokolle sagen ( 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'.

Ergebnisse von 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

Es gibt zwar keine Datei bei /usr/sbin/nginx, also habe ich es versucht apt install nginx, aber hier ist das Ergebnis:

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.

Als Neuling bin ich ziemlich verloren in diesem Durcheinander und ich brauche wirklich ein bisschen Hilfe.

Vielen Dank für Ihre Zeit.

Update 1:

Ergebnisse von 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
William Mai
quelle
Ich hatte etwas Ähnliches aus einem anderen Grund passiert. Ich bin nicht sicher, wie dies passiert ist, aber über Nacht, möglicherweise aufgrund eines Neustarts, der ein Update auslöste, lief Apache und blockierte die Ausführung von Nginx. Wenn das oben genannte nicht funktioniert, möchten Sie möglicherweise sehen, ob auch Apache ausgeführt wird. Beenden Sie in diesem Fall den Apache-Dienst und versuchen Sie dann, nginx zu starten.
user7547701

Antworten:

7

Sie haben also zwei Dinge, die in Konflikt stehen und dazu geführt haben, dass die Nginx-Binärdateien irgendwie verschwunden sind: die Xenial-Repository-Version und die NGINX-PPA. Gestatten Sie mir als Betreuer von beiden, den Konflikt zu erklären.

In Xenial haben wir 1.10.0 direkt nach der Veröffentlichung als Update veröffentlicht. Dieses Update hat uns zu einem "stabilen" Zweig geführt, aber es wurden keine dynamisch ladbaren Module erstellt und verfügbar gemacht. Dies war zeitlich bedingt, führte aber auch zu Konflikten, die während der Tests auftraten. In Zesty haben wir schließlich Unterstützung für dynamische Module erhalten.

In der PPA haben wir immer direkt von Debian geklont. Das heißt, wir hatten immer die Unterstützung von Debians 'dynamischem Modul', die mit den Xenial-Paketen in Konflikt stand und zu einigen Installations- und Upgrade-Konflikten führte.


Hier gibt es einen kleinen Konflikt - Sie können nicht mischen und anpassen nginx-core(dies ist die Standardversion für das nginxPaket in Ubuntu) und die PPAs, da dadurch manchmal Dinge verschwinden. Das Problem hierbei ist also, dass wir das vorhandene Ubuntu-Paket entfernen und dann nur von der PPA installieren müssen.

Um dies zu beheben, müssen Sie zuerst Ihre Nginx-Konfigurationen sichern, die Sie für Ihre Websites behalten möchten. Das heißt, erstellen Sie eine Kopie Ihres Verzeichnisses / etc / nginx / sites-available / an einer anderen Stelle (auch wenn das Ausgangsverzeichnis Ihres Benutzers in Ordnung ist, benötigen wir nur eine Kopie der Site-Konfigurationen). Außerdem benötigen wir eine Sicherungskopie Ihrer Website-Daten. Kopieren Sie diese also auch an eine andere Stelle (NICHT in die Standard-Docroot, damit sie nicht durcheinander kommt).

Sobald Sie die Kopie erstellt haben, müssen Sie die vorhandenen Nginx-Pakete entfernen. Dies kann mit dem folgenden Befehl erfolgen:

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

Sobald dies abgeschlossen ist, führen Sie es sudo apt-get updateerneut aus, um sicherzustellen, dass wir die aktuellsten Versionsnummern haben.

Dann nginxvon der PPA installieren - sudo apt-get install nginx nginx-full nginx-commonsollte dies tun.

Es sollte nicht länger fehlschlagen, Fehler zu starten. Stellen Sie sicher, dass Ihre Site-Konfigurationen noch vorhanden sind und nicht überschrieben wurden. Wenn dies der Fall ist, stellen Sie die zuvor erstellten Sicherungen der Site-Konfiguration und der Site-Daten wieder her. Ansonsten sind Sie fertig.

Thomas Ward
quelle
Hat funktioniert! Vielen Dank für Ihre Hilfe Thomas.
William Mai
Der einzige Gedanke, dass ich das finden konnte, löste mein Problem. Bedeutet dies also, dass es ein kleines Zeitfenster gab, in dem nginx unter Ubuntu aktualisiert wurde, wo dies ein Problem war? Der Grund, den ich frage, ist, dass ich mehrere Vagrant-Boxen aus Xenial zu unterschiedlichen Zeitpunkten erstellt habe. Nicht jede VM hatte dieses Problem, nur die älteren, wenn ich mich richtig erinnere.
David
@ David Ich bin ein wenig verwirrt über den Kontext hier, aber wenn Sie Xenial und die PPA verwenden, ist die PPA heutzutage viel neuer, daher würden diese die Xenial-Versionen unabhängig davon ersetzen, sodass dieser Konflikt nicht mehr relevant ist.
Thomas Ward
@ThomasWard Ich hatte ein Problem bei der Verwendung der Ubuntu Xenial-Basisbox auf einigen Vagrant-VMs, auf denen NGINX installiert wurde, aber ich konnte den Dienst nicht zum Starten bringen. Ich folgte diesen Anweisungen und dachte, es würde funktionieren, aber beim Neustart startete NGINX immer noch nicht. Ich bin möglicherweise am falschen Thread. Ich bin mir ziemlich sicher, dass mein Problem mit dem System zusammenhängt.
David
@ David klingt so, als ob es einen eigenen Fragenbeitrag braucht, denn das klingt nach einem völlig anderen Thema
Thomas Ward