inicie o nginx na inicialização com systemd

18

Acabei de instalar o nginx 1.9 em um servidor Debian 8. O nginx está funcionando bem, quando eu digo para executar, mas não parece carregar o nginx automaticamente na inicialização.

Eu tentei vários scripts init recomendados na internet, mas nada funcionou ainda. Então agora eu estou tentando descobrir isso com 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.

Infelizmente, não sei o que significa "serviço mascarado" e não sei por que ele está mascarado.

quando eu corro

sudo nginx

o servidor funciona muito bem. Então, eu tentei desmascarar o serviço nginx.

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

ok legal, agora posso iniciar o nginx usando systemctl. Então, verifiquei se a reinicialização carregaria o nginx automaticamente. Mas não o faz, e não tenho ideia para onde ir daqui.

Alguém pode me ajudar a executar o nginx automaticamente na inicialização?

j0h
fonte
6
systemctl enable nginx...
jasonwryan

Respostas:

21

Você parece confundir ativar, iniciar e mascarar operações.

  • systemctl start, systemctl stop: inicia (para) a unidade em questão imediatamente ;
  • systemctl enable, systemctl disable: Marcas (Desmarca) da unidade de arranque automático no momento do arranque (de um modo específico do aparelho, descrito na sua [Install]secção);
  • systemctl mask, systemctl unmask: proíbe (permite) todas e quaisquer tentativas de iniciar a unidade em questão (manualmente ou como uma dependência de qualquer outra unidade, incluindo as dependências do destino de inicialização padrão). Observe que a marcação para inicialização automática no systemd é implementada adicionando uma dependência artificial do destino de inicialização padrão à unidade em questão; portanto, "mascarar" também não permite a inicialização automática.

Portanto, todas essas são operações distintas. Destes, você quer systemctl enable.

Ref .: systemctl (1) .

Mais: Lennart Poettering (02/03/2011). "Os três níveis de folga" . systemd para administradores . 0pointer.de.

intelfx
fonte
Eu só quero que o nginx seja carregado na inicialização. Eu pensei que o systemctl poderia me ajudar a descobrir por que isso não está acontecendo.
J0h 20/05
@ j0h: Releia minha resposta novamente. Descrevi por que não inicia automaticamente e o que fazer para iniciar automaticamente. Dica: a última frase.
Intelfx 20/05
O link é redirecionado para uma página 404 e usei systemctl para ativar o nginx. Quando reiniciei, ele ainda não estava em execução. talvez eu deveria tentar systemctl permitir nginx.service
j0h
1
@ j0h: Eu quis dizer sentença, não referência. (BTW, desculpe pelo link quebrado - corrigido agora.) E sim, releia-o novamente, você precisa systemctl enable(não systemctl start) para iniciar algo na inicialização.
Intelfx 20/05
2

Corrigido o link na resposta aceita para que ele seja redirecionado para a página correta. Mas aqui está uma parte relevante:

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

onde se /lib/systemd/system/nginx.serviceparece com:

# 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
fonte
Uso a longo prazo em vez de SAIR para evitar Nginx de sair socket Unix obsoleto e não a próxima partida ( trac.nginx.org/nginx/ticket/753 )
danger89
2

Aqui está o que funcionou para mim: https://web.archive.org/web/20150328063215/https://longhandpixels.net/blog/2014/02/install-nginx-debian-ubuntu

Eu ignorei a maior parte do documento, que era específico para compilar outras versões, do nginx, e passei para "Make it Autostart".

Segui as instruções lá e agora, quando reinicio, o nginx 1.9 está em execução.

Eu definitivamente aprecio a ajuda e a visão de todos. Obrigado a todos!

j0h
fonte
4
Por favor, não basta soltar links como respostas: adicionar as informações relevantes para que a resposta não é dependente de um recurso externo ...
jasonwryan
4
De fato, agora o recurso externo se foi ... Veja-o em web.archive: web.archive.org/web/20150328063215/https://longhandpixels.net/…
reescrito em
1

dos 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
fonte