avvia nginx all'avvio con systemd


18

Ho appena installato nginx 1.9 su un server Debian 8. nginx funziona bene, quando gli dico di eseguirlo, ma non sembra caricare automaticamente nginx all'avvio.

Ho provato numerosi script di init consigliati su Internet, ma non ha ancora funzionato. Quindi ora sto cercando di capirlo con systemctl.

~$ 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.

Sfortunatamente, non so cosa significhi "servizio mascherato" e non so perché sia ​​mascherato.

quando corro

sudo nginx

il server funziona bene. Quindi, ho cercato di smascherare il servizio nginx.

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

ok bene, ora posso iniziare nginx usando systemctl. Quindi ho controllato per vedere se il riavvio avrebbe caricato automaticamente nginx. Ma non riesce a farlo, e non ho idea di dove andare da qui.

Qualcuno può aiutarmi a far funzionare automaticamente nginx all'avvio?


6
systemctl enable nginx...
Jasonwryan,

Risposte:


21

Sembra che confonda le operazioni di abilitazione, avvio e maschera.

  • systemctl start, systemctl stop: avvia (arresta) l'unità in questione immediatamente ;
  • systemctl enable, systemctl disable: contrassegna (deseleziona) l'unità per l' avvio automatico al momento dell'avvio (in un modo specifico dell'unità, descritto nella sua [Install]sezione);
  • systemctl mask, systemctl unmask: non consente (consente) tutti i tentativi di avviare l'unità in questione (manualmente o come dipendenza di qualsiasi altra unità, comprese le dipendenze della destinazione di avvio predefinita). Si noti che la marcatura per l'avvio automatico in systemd viene implementata aggiungendo una dipendenza artificiale dalla destinazione di avvio predefinita all'unità in questione, quindi anche "maschera" non consente l'avvio automatico.

Quindi, queste sono tutte operazioni distinte. Di questi, vuoi systemctl enable.

Rif .: systemctl (1) .

Altro: Lennart Poettering (2011-03-02). "I tre livelli di Off" . systemd per amministratori . 0pointer.de.


Voglio solo caricare nginx all'avvio. Pensavo che systemctl potesse aiutarmi a capire perché non stava accadendo.
j0h

@ j0h: rileggi di nuovo la mia risposta. Ho descritto perché non si avvia automaticamente e cosa fare per avviarlo automaticamente. Suggerimento: l'ultima frase.
intelfx,

Il link reindirizza a una pagina 404 e ho usato systemctl per abilitare nginx. Quando ho riavviato, non funzionava ancora. forse dovrei provare systemctl abilitare nginx.service
j0h

1
@ j0h: intendevo frase, non riferimento. (A proposito, scusa per il collegamento interrotto - risolto ora.) E sì, rileggilo ancora una volta, devi systemctl enable(non systemctl start) iniziare qualcosa all'avvio.
intelfx,

2

Risolto il problema con il link nella risposta accettata in modo che reindirizzasse alla pagina giusta. Ma ecco un po 'rilevante:

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

dove /lib/systemd/system/nginx.serviceassomiglia a qualcosa:

# 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

`

Usa TERM invece di QUIT per impedire a Nginx di abbandonare il socket Unix non aggiornato e di fallire il prossimo avvio ( trac.nginx.org/nginx/ticket/753 )
danger89,

2

Ecco cosa ha funzionato per me: https://web.archive.org/web/20150328063215/https://longhandpixels.net/blog/2014/02/install-nginx-debian-ubuntu

Ho ignorato la maggior parte del documento, che era specifico per la compilazione di altre versioni, di nginx, e sono passato a "Make Auto Startart".

Ho seguito le indicazioni lì, e ora quando riavvio, nginx 1.9 è in esecuzione.

Apprezzo sicuramente l'aiuto e la comprensione di tutti. Grazie a tutti!


4
Ti preghiamo di non eliminare i collegamenti come risposte: aggiungi le informazioni pertinenti in modo che la risposta non dipenda da una risorsa esterna ...
jasonwryan,

4
Infatti ora la risorsa esterna è andata ... Guardala su web.archive: web.archive.org/web/20150328063215/https://longhandpixels.net/…
riscritto il

1

dalle risorse di nginx 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.