Nginx: Job für nginx.service ist fehlgeschlagen, weil der Steuerungsprozess beendet wurde

77

Ich habe ein Problem, das ich seit einigen Tagen zu beheben versuche, und ich weiß nicht, was ich tun soll. Ich habe nach Antworten gesucht, aber all die, die ich gefunden habe, haben mir nicht geholfen.

Ich bin ein bisschen neu hier und ich hoffe wirklich, dass mir jemand helfen kann. Sie können mir sagen, welche Informationen ich geben muss, um eine Lösung zu finden.

$ systemctl status nginx.service
nginx.service - Startup script for nginx service
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Tue 2016-03-08 13:23:35 GMT; 2min 20s ago

Mar 08 13:23:33 startdedicated.com nginx[8315]: nginx: [emerg] bind() to ------------ f...e)
Mar 08 13:23:33 startdedicated.com nginx[8315]: nginx: [emerg] bind() to ----- f...e)
Mar 08 13:23:34 startdedicated.com nginx[8315]: nginx: [emerg] bind() to ----- f...e)
Mar 08 13:23:34 startdedicated.com nginx[8315]: nginx: [emerg] bind() to ----- f...e)
Mar 08 13:23:35 startdedicated.com nginx[8315]: nginx: [emerg] bind() to ----- f...e)
Mar 08 13:23:35 .startdedicated.com nginx[8315]: nginx: [emerg] still could not bind()
Mar 08 13:23:35 startdedicated.com systemd[1]: nginx.service: control process exited, code=...=1
Mar 08 13:23:35 startdedicated.com systemd[1]: Failed to start Startup script for nginx service.
Mar 08 13:23:35 startdedicated.com systemd[1]: Unit nginx.service entered failed state.
Mar 08 13:23:35 startdedicated.com systemd[1]: nginx.service failed.
Daliborsb
quelle
1
Bitte posten Sie Ihre nginx.conf und: "nginx -t" Ausgabe ...
user2925795
prntscr.com/acoayr Hier ist es. Ich kann den Code nicht posten, also musste ich einen Screenshot machen.
Daliborsb
Bitte posten Sie Ihre Serverblockkonfiguration und: "nginx -t" Ausgabe ... Haben Sie versucht, nginx neu zu starten? "service nginx
restart
nginx -t Ausgabe nginx: Die Syntax der Konfigurationsdatei /etc/nginx/nginx.conf ist in Ordnung nginx-Neustart nginx neu starten (über systemctl): Der Job für nginx.service ist fehlgeschlagen, da der Steuerungsprozess mit Fehlercode beendet wurde. Weitere Informationen finden Sie unter "systemctl status nginx.service" und "journalctl -xe". [FEHLGESCHLAGEN]
Daliborsb
Schauen Sie sich /var/log/nginx/errors.log an. Es gibt alle Informationen zu Fail.
Adizbek Ergashev

Antworten:

119

Versuchen Sie, die folgenden zwei Befehle auszuführen:

sudo fuser -k 80/tcp

sudo fuser -k 443/tcp

Dann ausführen

sudo service nginx restart

Wenn dies funktioniert hat , installiert Ihr Hosting-Anbieter möglicherweise Apache standardmäßig während einer Neuinstallation auf Ihrem Server. Lesen Sie daher weiter, um eine dauerhaftere Lösung zu finden. Wenn dies nicht funktioniert hat, lesen Sie weiter, um das Problem zu identifizieren.

Führen Sie aus nginx -tund wenn es nichts zurückgibt, würde ich das Nginx-Fehlerprotokoll überprüfen. Standardmäßig sollte es sich in befinden /var/log/nginx/error.log.

Sie können es mit jedem Texteditor öffnen: sudo nano /var/log/nginx/error.log

Kannst du dort etwas Verdächtiges finden?

Das zweite Protokoll, das Sie überprüfen können, ist das folgende

sudo nano /var/log/syslog

Als ich dieses Problem hatte, lag es daran, dass mein Hosting-Anbieter Apache während einer Neuinstallation automatisch installierte. Es blockierte Port 80.

Bei der Ausführung wurde sudo nano /var/log/nginx/error.logFolgendes als Fehlerprotokoll angezeigt:

2018/08/04 06:17:33 [emerg] 634#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/08/04 06:17:33 [emerg] 634#0: bind() to [::]:80 failed (98: Address already in use)
2018/08/04 06:17:33 [emerg] 634#0: bind() to 0.0.0.0:80 failed (98: Address already in use)

Der obige Fehler zeigt, dass Nginx nicht an Port 80 gebunden werden konnte, da es bereits verwendet wurde.

Um dies zu beheben, müssen Sie Folgendes ausführen:

yum install net-tools

sudo netstat -tulpn

Wenn Sie das oben genannte ausführen, erhalten Sie ungefähr Folgendes:

Proto Recv-Q Send-Q Local Address           Foreign Address         State    PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1762/httpd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1224/sshd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1528/sendmail:acce
tcp6       0      0 :::22                   :::*                    LISTEN      1224/sshd

Sie können sehen, dass Port 80 von httpd (Apache) blockiert wird. Dies kann auch Port 443 sein, wenn Sie SSL verwenden.

Rufen Sie die PID des Prozesses ab, der Port 80 oder 443 verwendet. Senden Sie den Befehl kill, indem Sie den <PID>Wert ändern :

sudo kill -2 <PID>

Beachten Sie in meinem Beispiel, dass der PID-Wert von Apache 1762so war, dass ich ihn ausführen würdesudo kill -2 1762

Alternativ können Sie Folgendes ausführen:

sudo fuser -k 80/tcp

sudo fuser -k 443/tcp

Nachdem Port 80 oder 443 klar ist, können Sie Nginx starten, indem Sie Folgendes ausführen:

sudo service nginx restart

Es ist auch ratsam, alles zu entfernen, was zuvor die Ports 80 und 443 blockiert hat. Dadurch werden Konflikte in Zukunft vermieden. Da Apache (httpd) meine Ports blockierte, entfernte ich es, indem ich Folgendes ausführte:

yum remove httpd httpd-devel httpd-manual httpd-tools mod_auth_kerb mod_auth_mysql mod_auth_pgsql mod_authz_ldap mod_dav_svn mod_dnssd mod_nss mod_perl mod_revocator mod_ssl mod_wsgi

Hoffe das hilft.

Abhishek R.
quelle
1
tnx ich versuche nur 'sudo fuser -k 80 / tcp' und 'sudo fuser -k 443 / tcp' und nginx arbeiten für mich
Mohmmad Ebrahimi Aval
In meinem Fall habe ich offiziell node / expressjs verwendet, um meinen Server zu verwalten. HTTP wurde so eingestellt, dass es auf Port 80 ausgeführt wird, während https so eingestellt ist, dass Port 443 ausgeführt wird. Ich habe sie entfernt, wie es der Fall sein sollte, und Nginx hat wie erwartet funktioniert. Ich denke, der Fehler bedeutet, dass ein anderer Dienst Port 8080 verwendet.
Xplorer1
Ich habe das seltsamste Problem. Wenn ich das tue, sehe sudo netstat -tulpnich tatsächlich tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 24873/nginx: master , aber wenn ich versuche, den Dienst zu starten oder seinen Status zu sehen, bekomme ich dieses nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)Bizarre. Irgendeine Idee warum?
Newskooler
Vielen Dank, dass Sie mir Zeit gespart haben.
Arun Kumar MG
51

Kann nützlich sein, um die Syntax der Konfigurationsdateien von Nginx zu überprüfen, indem Sie Folgendes ausführen:

nginx -t -c /etc/nginx/nginx.conf
Dinesh Sunny
quelle
In meinem Fall funktioniert es mit sudo /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.confoder einfachsudo /usr/local/nginx/sbin/nginx -t
Pathros
Der obige Befehl zeigt die Fehler in Ihren Konfigurationsdateien an, die zu hinzugefügt wurden. nginx/sites-enabledSobald diese Fehler behoben sind, werden alle anderen Befehle ordnungsgemäß ausgeführt.
Sachin Kumar
44

In meinem Fall liegt es daran, dass der Apache-Server irgendwie läuft. Also stoppe ich Apache und starte Nginx neu. Arbeite wie ein Zauber!

sudo /etc/init.d/apache2 stop
sudo systemctl restart nginx
Tánh
quelle
16

Versuchen Sie, mit dem folgenden Befehl zu debuggen:

$ service nginx configtest

Welche Ausgaben so etwas wie:

Testing nginx configuration: nginx: [emerg] unknown directive "stub_status" in /etc/nginx/sites-enabled/nginx_status:11
nginx: configuration file /etc/nginx/nginx.conf test failed

Und beheben Sie diese Warnungen

Starten Sie dann nginx neu

itsnikolay
quelle
1
Dies wäre einer der besten Ansätze, die versucht werden müssen, danke
GPrathap
29
Testen der Nginx-Konfiguration: fehlgeschlagen!
Igor Ganapolsky
@IgorGanapolsky ja, sturn russische Technik
itsnikolay
Ich bekommeThe service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl.
Joseph K.
15

Die Ursache des Problems ist folgende: Ich hatte bereits einen ApacheWebserver installiert und habe den Port 80auf meinem lokalen Computer aktiv überwacht .

Apacheund Nginxsind die beiden wichtigsten Open-Source-Hochleistungs-Webserver, die in der Lage sind, unterschiedliche Workloads zu bewältigen, um die Anforderungen moderner Webanforderungen zu erfüllen. Jedoch Apachedient in erster Linie als ein HTTP - Server , während Nginxein Hochleistungs asynchroner Web - Server und Reverse - Proxy - Server.

Die Unfähigkeit Nginxzu starten war, weil ApachePort 80 bereits als Standardport abgehört wurde, der auch der Standardport für ist Nginx.

Eine schnelle Problemumgehung besteht darin, den ApacheServer zu stoppen, indem Sie den folgenden Befehl ausführen

systemctl stop apache2
systemctl status apache2

Starten Sie dann den NginxServer, indem Sie den folgenden Befehl ausführen

systemctl stop nginx
systemctl status nginx

Das gleiche Problem tritt jedoch erneut auf, wenn wir versuchen, den ApacheServer erneut zu starten , da beide den Port 80als Standardport verwenden.

So habe ich es behoben :

Führen Sie den folgenden Befehl aus, um die Standardkonfigurationsdatei von Nginx im Nano-Editor zu öffnen

sudo nano /etc/nginx/sites-available/default

Scrollen Sie beim Öffnen der Datei im Nano-Editor nach unten und ändern Sie den Standard-Server-Port in einen beliebigen Port Ihrer Wahl. Für mich habe ich mich entschieden, es in Port zu ändern85

# Default server configuration
#
server {
       listen 85 default_server;
       listen [::]:85 default_server;

Scrollen Sie auch nach unten und ändern Sie den virtuellen Host-Port in einen beliebigen Port Ihrer Wahl. Für mich habe ich mich auch dafür entschieden, es in Port zu ändern85

# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
# server {
#        listen 85;
#        listen [::]:85;

Dann speichern und beenden Sie die Datei , indem Sie auf Ihrer Tastatur drücken:

Ctrl + S
Ctrl + X

Möglicherweise werden Sie weiterhin aufgefordert, Y auf Ihrer Tastatur zu drücken , um Ihre Änderungen zu speichern.

Bestätigen Sie abschließend, dass Ihre Konfiguration korrekt ist, und starten Sie den NginxServer neu:

sudo nginx -t
sudo systemctl restart nginx

Sie können jetzt in Ihrem Browser zu localhost:nginx-port( localhost:85) navigieren , um die Änderungen zu bestätigen.

Anzeigen der Standard-Nginx-Startseite

Wenn die Standard-Nginx-Startseite angezeigt werden soll, wenn Sie in Ihrem Browser zu localhost:nginx-port( localhost:85) navigieren, gehen Sie folgendermaßen vor:

Untersuchen Sie das Verzeichnis, /var/www/html/das das Standardverzeichnis rootfür beide ist, Apacheund Nginxlisten Sie dessen Inhalt auf:

cd ~
ls /var/www/html/

Sie werden 2 Dateien im Verzeichnis aufgelistet:

index.html                # Apache default start page
index.nginx-debian.html   # Nginx default start page

Führen Sie den folgenden Befehl aus, um die Standardkonfigurationsdatei von Nginx im Nano-Editor zu öffnen:

cd ~
sudo nano /etc/nginx/sites-available/default

Ändern Sie die Reihenfolge der Indexdateien im Stammverzeichnis wie folgt:

root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;

dazu (Setzen der Standard-Nginx-Startseite - index.nginx-debian.htmlunmittelbar danach auf die 2. Position index):

root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.nginx-debian.html index.html index.htm;

Dann speichern und beenden Sie die Datei , indem Sie auf Ihrer Tastatur drücken:

Ctrl + S
Ctrl + X

Möglicherweise werden Sie weiterhin aufgefordert, Y auf Ihrer Tastatur zu drücken , um Ihre Änderungen zu speichern.

Bestätigen Sie abschließend, dass Ihre Konfiguration korrekt ist, und starten Sie den NginxServer neu:

sudo nginx -t
sudo systemctl restart nginx

Sie können jetzt in Ihrem Browser zu localhost:nginx-port( localhost:85) navigieren , um die Änderungen zu bestätigen.

Das ist alles.

ich hoffe das hilft

Versprich Preston
quelle
1
Ich weiß es nicht, aber aus irgendeinem Grund wurde Apache installiert. Ich habe es nicht installiert. Es kam wahrscheinlich mit dem VPS, an dem ich arbeitete, also ignorierte ich diese Antwort und folgte allen anderen, am Ende versuchte ich es und danke Ihnen vielmals. Jetzt kann ich schlafen.
Mujeeb Ishaque
1
Vielen Dank, das hat geholfen
Hanzla Habib
8

Wenn etwas nicht an einen Port gebunden werden kann, sind es 5%, weil es nicht von root (Sticky Suid Bit, Sudo) gestartet wird, und 94%, weil eine andere Anwendung bereits an diesen Port gebunden ist.

Stellen Sie sicher, dass Nginx wirklich heruntergefahren ist und Sie nicht versuchen, es versehentlich zweimal zu starten.

Stellen Sie sicher, dass Apache oder andere Dienste, die Port 80 verwenden, nicht ausgeführt werden.

Nutzen Sie netstat -a | grep tcp, um mehr zu erfahren.

Daniel W.
quelle
7

Das Ändern des Ports kann hilfreich sein, da 80 Ports bereits irgendwo verwendet werden

vi /etc/nginx/sites-available/default

Ändern Sie den Port:

listen 8080 default_server;
listen [::]:8080 default_server;

Starten Sie dann den Nginx-Server neu

nginx -t
service nginx restart
dushyant
quelle
5

Für meinen Fall muss ich rennen

sudo nginx -t

Es wird überprüft, ob die Nginx-Konfiguration korrekt ist oder nicht. Wenn nicht, wird angezeigt, welche Konfiguration den Fehler verursacht.

Dann müssen Sie gehen /etc/nginx/sites-available, um die defekte Konfiguration zu beheben.

Danach können Sie Nginx problemlos neu starten.

sudo systemctl restart nginx
Hoang Trinh
quelle
Ich hatte zwei Dateien, die auf Port 80 zeigten. Löschen Sie eine und es funktionierte. Vielen Dank
Vidhya
3

In meinem Fall konnte nginx die hier befindliche Protokolldatei nicht öffnen /var/log/nginx/error.log

Dies lag daran, dass ich das Protokollverzeichnis gelöscht hatte, um Speicherplatz im Stammverzeichnis freizugeben (was sich als dumm herausstellte).

Ich habe dann einen Protokollordner in var und einen Nginx-Ordner in log erstellt.

Dann einfach laufen sudo service nginx start

Shivendra Nath Misra
quelle
3
$ ps ax | grep nginx<br>
$ kill -9 PIDs
$ service nginx start



oder zurücksetzen /etc/nginx/sites-available/default

location / {
     # Zuerst versuchen, die Anforderung als Datei, dann
     # als Verzeichnis

     bereitzustellen , und dann auf die Anzeige eines 404 zurückgreifen. try_files $ uri $ uri / = 404;
}}

spitfir33
quelle
2

Versuchen Sie, einen Benutzer in der Datei nginx.conf festzulegen. Vielleicht kann er deshalb den Dienst nicht starten:

User www-data;
user2925795
quelle
Sollte ich einfach eine neue Zeile mit "User = www-data" hinzufügen?
Daliborsb
In Ihrer nginx.conf .. ist die erste Zeile des Druckbildschirms Benutzer nginx. entferne das # und setze User www-data;
user2925795
Aktualisieren Sie www-Daten auf falcon170
user2925795
Immer noch das Gleiche. Ich habe versucht, "journalctl -xe" zu suchen, und das habe ich bekommen. prntscr.com/acp9p5
Daliborsb
httpd und nginx laufen auf demselben Port. Gestoppt httpd und Nginx konnte starten. Suchen Sie jetzt nach einer Lösung.
Daliborsb
2

Ich hatte das gleiche Problem, als ich Vesta verwendete, das Nginx mit Apache verwendet. Das Problem war, dass Apache nach dem Anwenden aller Updates 443 auf https abhörte. Die Lösung bestand nur darin, die 443 Inhalte in ports.conf zu kommentieren. Dies liegt daran, dass nginx auch diesen Port verwendet.

Aleks
quelle
1

Überprüfen Sie df -h, wenn Sie sich unter dem centOS-System befinden

Lulu
quelle
0

Das hat bei mir funktioniert:

Gehen Sie zuerst zu

cd / etc / nginx

Nehmen Sie die Änderungen in der Datei nginx.conf vor und stellen Sie den Standardport so ein, dass er von 80 auf eine beliebige 85 oder etwas anderes wartet.

Verwenden Sie dann diesen Befehl, um diesen Porttyp zu binden, damit nginx ihn verwenden kann:

Semanage-Port -a -t PORT_TYPE -p TCP 85

Dabei ist PORT_TYPE eine der folgenden Angaben: http_cache_port_t, http_port_t, jboss_management_port_t, jboss_messaging_port_t, ntop_port_t, puppet_port_t.

Dann renne:

sudo systemctl start nginx; #sudo systemctl status nginx

[Sie sollten den aktiven Status sehen]; #sudo systemctl enable nginx

tushar1092
quelle
0

Versuchen :

sudo service nginx restart
Amir.S
quelle
Dies gibt keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klarstellung zu bitten, hinterlassen Sie einen Kommentar unter seinem Beitrag. - Von der Überprüfung
con
0

Schreiben Sie einfach, dass Ihre Arbeit erledigt ist

sudo rm /etc/nginx/sites-enabled/default

sudo service nginx restart

systemctl status nginx

Viel Spaß beim Lernen

Jay Soni
quelle
-1

Ich verwende RHEL 7.4 mit NGINX 1.13.8 und wenn ich dasselbe mit sudo mache, funktioniert es Ok:

sudo systemctl status nginx.service

Stellen Sie einfach sicher, dass jeder, der verwenden möchte, nginx.serviceüber Ausführungsberechtigungen verfügt.

Ostati
quelle
-2
  • Verwenden Sie diesen Befehl, um

    1. sudo service apache2 stop

    2. sudo apt-get purge apache2

    3. sudo apt-get update

    4. sudo apt-get install nginx

    5. sudo service nginx neu starten

Deepak Kr
quelle
10
Mehr Erklärung würde dies zu einer besseren Antwort machen.
CGritton