iniciar nginx en el arranque con systemd

18

Acabo de instalar nginx 1.9 en un servidor Debian 8. nginx funciona bien, cuando le digo que se ejecute, pero no parece cargar nginx automáticamente en el arranque.

He probado numerosos scripts de inicio recomendados en Internet, pero nada ha funcionado todavía. Así que ahora estoy tratando de averiguarlo 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.

Desafortunadamente, no sé qué significa "servicio enmascarado", y no sé por qué está enmascarado.

cuando corro

sudo nginx

El servidor funciona bien. Entonces, busqué desenmascarar el servicio nginx.

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

ok genial, ahora puedo comenzar nginx usando systemctl. Así que verifiqué si el reinicio cargaría nginx automáticamente. Pero no lo hace, y no tengo idea de a dónde ir desde aquí.

¿Puede alguien ayudarme a conseguir nginx se ejecuten automáticamente en el arranque?

j0h
fuente
66
systemctl enable nginx...
jasonwryan

Respuestas:

21

Parece confundir las operaciones de habilitar, iniciar y enmascarar.

  • systemctl start, systemctl stop: inicia (detiene) la unidad en cuestión inmediatamente ;
  • systemctl enable, systemctl disable: marca (desmarca) la unidad para el inicio automático en el momento del arranque (de una manera específica de la unidad, descrita en su [Install]sección);
  • systemctl mask, systemctl unmask: no permite (permite) todos y cualquier intento de iniciar la unidad en cuestión (ya sea manualmente o como una dependencia de cualquier otra unidad, incluidas las dependencias del objetivo de arranque predeterminado). Tenga en cuenta que el marcado para el inicio automático en systemd se implementa agregando una dependencia artificial del objetivo de inicio predeterminado a la unidad en cuestión, por lo que "máscara" también impide el inicio automático.

Entonces, todas estas son operaciones distintas. De estos, tú quieres systemctl enable.

Ref .: systemctl (1) .

Más: Lennart Poettering (2011-03-02). "Los tres niveles de apagado" . systemd para administradores . 0pointer.de.

intelfx
fuente
Solo quiero que nginx se cargue en el arranque. Pensé que systemctl podría ayudarme a descubrir por qué no está sucediendo.
j0h
@ j0h: Vuelva a leer mi respuesta nuevamente. He descrito por qué no se inicia automáticamente y qué hacer para que se inicie automáticamente. Pista: la última oración.
intelfx
El enlace redirige a una página 404, y utilicé systemctl para habilitar nginx. Cuando reinicié, todavía no se estaba ejecutando. tal vez debería probar systemctl enable nginx.service
j0h
1
@ j0h: quise decir oración, no referencia. (Por cierto, perdón por el enlace roto, solucionado ahora). Y sí, vuelva a leerlo una vez más, necesita systemctl enable(no systemctl start) para hacer que algo comience en el arranque.
intelfx
2

Se corrigió el enlace en la respuesta aceptada para que redirija a la página correcta. Pero aquí hay un poco relevante:

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

donde se /lib/systemd/system/nginx.serviceve algo así como:

# 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
fuente
Use TERM en lugar de QUIT para evitar que Nginx deje el socket obsoleto de Unix y falle el siguiente inicio ( trac.nginx.org/nginx/ticket/753 )
danger89
2

Aquí está lo que funcionó para mí: https://web.archive.org/web/20150328063215/https://longhandpixels.net/blog/2014/02/install-nginx-debian-ubuntu

Ignoré la mayor parte del documento, que era específico para compilar otras versiones, de nginx, y pasé a "Make it Autostart".

Seguí las instrucciones allí, y ahora cuando reinicio, nginx 1.9 se está ejecutando.

Definitivamente aprecio la ayuda y la comprensión de todos. ¡Gracias a todos!

j0h
fuente
44
Por favor, no deje caer los enlaces como respuestas: agregue la información relevante para que la respuesta no dependa de un recurso externo ...
jasonwryan
44
De hecho, ahora el recurso externo se ha ido ... Véalo en web.archive: web.archive.org/web/20150328063215/https://longhandpixels.net/…
reescrito
1

a partir de recursos 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
fuente