starte nginx beim booten mit systemd

18

Ich habe gerade nginx 1.9 auf einem Debian 8-Server installiert. nginx funktioniert einwandfrei, wenn ich es zum Laufen bringe, aber es scheint nginx beim Booten nicht automatisch zu laden.

Ich habe zahlreiche im Internet empfohlene Init-Skripte ausprobiert, aber es hat noch nichts funktioniert. Jetzt versuche ich es mit systemctl herauszufinden.

~$ systemctl status nginx
● nginx.service
   Loaded: masked (/dev/null)
   Active: inactive (dead)
~$ sudo systemctl try-restart nginx
Failed to try-restart nginx.service: Unit nginx.service is masked.
~$ sudo systemctl reload nginx
Failed to reload nginx.service: Unit nginx.service is masked.
~$ sudo systemctl reload nginx
Failed to reload nginx.service: Unit nginx.service is masked.

Leider weiß ich nicht, was "Service ist maskiert" bedeutet, und ich weiß nicht, warum es maskiert ist.

wenn ich renne

sudo nginx

Der Server läuft einwandfrei. Also habe ich mir vorgenommen, den Nginx-Dienst zu entlarven.

~$ sudo systemctl unmask nginx.service
Removed symlink /etc/systemd/system/nginx.service.

ok cool, jetzt kann ich nginx mit systemctl starten. Also habe ich geprüft, ob beim Neustart Nginx automatisch geladen wird. Aber es gelingt mir nicht und ich habe keine Ahnung, wohin ich von hier aus gehen soll.

Kann mir jemand helfen, Nginx beim Booten automatisch zum Laufen zu bringen?

j0h
quelle
6
systemctl enable nginx...
jasonwryan

Antworten:

21

Sie scheinen Vorgänge zu aktivieren, zu starten und zu maskieren.

  • systemctl start, systemctl stop: startet (stoppt) das betreffende Gerät sofort ;
  • systemctl enable, systemctl disable: markiert (unmarkiert) das Gerät für den Autostart beim Booten (auf eine gerätespezifische Art und Weise, wie in seinem [Install]Abschnitt beschrieben);
  • systemctl mask, systemctl unmask: Alle Versuche, die betreffende Einheit manuell oder in Abhängigkeit von einer anderen Einheit, einschließlich der Abhängigkeiten des Standardstartziels, zu starten, sind nicht zulässig. Beachten Sie, dass das Markieren für Autostart in systemd durch Hinzufügen einer künstlichen Abhängigkeit vom Standardstartziel zum betreffenden Gerät implementiert wird, sodass "mask" auch Autostart nicht zulässt.

Das sind also alles unterschiedliche Operationen. Von diesen wollen Sie systemctl enable.

Ref .: systemctl (1) .

Mehr: Lennart Pöttering (02.03.2011). "Die drei Ebenen von Off" . systemd für Administratoren . 0pointer.de.

intelfx
quelle
Ich möchte nur, dass Nginx beim Booten geladen wird. Ich dachte, systemctl könnte mir helfen, herauszufinden, warum es nicht passiert.
20.
@ j0h: Lies meine Antwort nochmal durch. Ich habe beschrieben, warum es nicht automatisch startet und was zu tun ist, um es automatisch zu starten. Hinweis: der letzte Satz.
Intelfx
Der Link leitet zu einer 404-Seite weiter, und ich habe systemctl verwendet, um nginx zu aktivieren. Beim Neustart lief es immer noch nicht. Vielleicht sollte ich versuchen, systemctl aktivieren nginx.service
j0h
1
@ j0h: Ich habe Satz gemeint, nicht Verweis. (Übrigens, Entschuldigung für die Unterbrechung des Links - jetzt behoben.) Und ja, lesen Sie es noch einmal, Sie müssen systemctl enable(nicht systemctl start) etwas beim Booten starten lassen.
intelfx
2

Der Link in der akzeptierten Antwort wurde korrigiert, sodass er zur rechten Seite weiterleitet. Aber hier ist ein relevanter Punkt:

sudo systemctl enable nginx.service
sudo systemctl start nginx.service
sudo systemctl status nginx.service

wo /lib/systemd/system/nginx.servicesieht so etwas aus:

# 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
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
TimeoutStopSec=5
KillMode=mixed

[Install]
WantedBy=multi-user.target

`
luxagraf
quelle
Verwenden Sie TERM anstelle von QUIT, um zu verhindern, dass Nginx den alten Unix-Socket verlässt und beim nächsten Start fehlschlägt ( trac.nginx.org/nginx/ticket/753 )
danger89
2

Hier ist, was für mich funktioniert hat: https://web.archive.org/web/20150328063215/https://longhandpixels.net/blog/2014/02/install-nginx-debian-ubuntu

Ich habe den größten Teil des Dokuments, das speziell für das Kompilieren anderer Versionen von nginx bestimmt war, ignoriert und bin zu "Make it Autostart" übergegangen.

Ich habe die Anweisungen dort befolgt und jetzt, wenn ich neu starte, wird Nginx 1.9 ausgeführt.

Ich schätze auf jeden Fall die Hilfe und die Einsicht aller. Danke euch allen!

j0h
quelle
4
Bitte
hinterlassen
4
Tatsächlich ist die externe Ressource jetzt weg ... Sieh es auf web.archive: web.archive.org/web/20150328063215/https://longhandpixels.net/…
umgeschrieben
1

von nginx resources https://www.nginx.com/resources/wiki/start/topics/examples/systemd/

echo "
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
" > /lib/systemd/system/nginx.service
Simone Sanfratello
quelle