démarrer nginx au démarrage avec systemd

18

Je viens d'installer nginx 1.9 sur un serveur Debian 8. nginx fonctionne bien, quand je lui dis de s'exécuter, mais il ne semble pas charger nginx automatiquement au démarrage.

J'ai essayé de nombreux scripts d'initialisation recommandés sur Internet, mais rien n'a encore fonctionné. Alors maintenant, j'essaie de le comprendre avec 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.

Malheureusement, je ne sais pas ce que signifie "service masqué" et je ne sais pas pourquoi il est masqué.

quand je cours

sudo nginx

le serveur fonctionne très bien. Alors, j'ai cherché à démasquer le service nginx.

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

ok cool, maintenant je peux démarrer nginx en utilisant systemctl. J'ai donc vérifié si le redémarrage chargerait automatiquement nginx. Mais il ne le fait pas, et je ne sais pas où aller d'ici.

Quelqu'un peut-il m'aider à faire fonctionner nginx automatiquement au démarrage?

j0h
la source
6
systemctl enable nginx...
jasonwryan

Réponses:

21

Vous semblez confondre les opérations d'activation, de démarrage et de masquage.

  • systemctl start, systemctl stop: démarre (arrête) immédiatement l'unité en question ;
  • systemctl enable, systemctl disable: marque (décocher) l'unité pour le démarrage automatique au démarrage (d'une manière spécifique à l'unité, décrite dans sa [Install]section);
  • systemctl mask, systemctl unmask: interdit (autorise) toutes les tentatives de démarrage de l'unité en question (manuellement ou en tant que dépendance de toute autre unité, y compris les dépendances de la cible de démarrage par défaut). Notez que le marquage pour le démarrage automatique dans systemd est implémenté en ajoutant une dépendance artificielle de la cible de démarrage par défaut à l'unité en question, donc "mask" interdit également le démarrage automatique.

Ce sont donc toutes des opérations distinctes. De ceux-ci, vous voulez systemctl enable.

Réf .: systemctl (1) .

Pour en savoir plus: Lennart Poettering (2011-03-02). "Les Trois Niveaux d'Off" . systemd pour les administrateurs . 0pointer.de.

intelfx
la source
Je veux juste que nginx se charge au démarrage. Je pensais que systemctl pourrait m'aider à comprendre pourquoi cela ne se produit pas.
2015 à 10h58
@ j0h: relisez ma réponse. J'ai expliqué pourquoi il ne démarre pas automatiquement et que faire pour qu'il démarre automatiquement. Indice: la dernière phrase.
intelfx
Le lien redirige vers une page 404, et j'ai utilisé systemctl pour activer nginx. Lorsque j'ai redémarré, il ne fonctionnait toujours pas. peut-être devrais-je essayer systemctl enable nginx.service
j0h
1
@ j0h: Je voulais dire phrase, pas référence. (BTW, désolé pour le lien cassé - réparé maintenant.) Et oui, relisez-le encore une fois, vous devez systemctl enable(pas systemctl start) faire démarrer quelque chose au démarrage.
intelfx
2

Correction du lien dans la réponse acceptée afin qu'il redirige vers la bonne page. Mais voici un peu pertinent:

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

/lib/systemd/system/nginx.serviceressemble à quelque chose comme:

# 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
la source
Utilisez TERM au lieu de QUIT pour empêcher Nginx de quitter le socket Unix périmé et d'échouer au prochain démarrage ( trac.nginx.org/nginx/ticket/753 )
danger89
2

Voici ce qui a fonctionné pour moi: https://web.archive.org/web/20150328063215/https://longhandpixels.net/blog/2014/02/install-nginx-debian-ubuntu

J'ai ignoré la plupart du document, qui était spécifique à la compilation d'autres versions de nginx, et je suis passé à "Make it Autostart".

J'ai suivi les instructions là-bas, et maintenant quand je redémarre, nginx 1.9 est en cours d'exécution.

J'apprécie vraiment l'aide et la perspicacité de chacun. Merci à tous!

j0h
la source
4
Veuillez ne pas simplement déposer des liens comme réponses: ajoutez les informations pertinentes afin que la réponse ne dépende pas d'une ressource externe ...
jasonwryan
4
En fait, maintenant, la ressource externe a disparu ... Voir sur web.archive: web.archive.org/web/20150328063215/https://longhandpixels.net/…
réécrit le
1

à partir des ressources 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
Simone Sanfratello
la source