uruchom nginx przy starcie systemu

18

Właśnie zainstalowałem nginx 1.9 na serwerze Debian 8. nginx działa dobrze, kiedy każę mu działać, ale wydaje się, że nie ładuje się automatycznie przy uruchamianiu.

Próbowałem wielu skryptów inicjujących zalecanych w Internecie, ale nic jeszcze nie działało. Więc teraz próbuję to rozgryźć przy pomocy 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.

Niestety nie wiem, co oznacza „usługa maskowana” i nie wiem, dlaczego jest maskowana.

kiedy biegnę

sudo nginx

serwer działa dobrze. Tak więc postanowiłem zdemaskować usługę nginx.

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

ok fajnie, teraz mogę uruchomić nginx za pomocą systemctl. Więc sprawdziłem, czy ponowne uruchomienie spowoduje automatyczne załadowanie nginx. Ale to się nie udaje i nie mam pojęcia, dokąd się udać.

Czy ktoś może mi pomóc uruchomić Nginx automatycznie podczas uruchamiania?

j0h
źródło
6
systemctl enable nginx...
jasonwryan

Odpowiedzi:

21

Wydaje się, że mylisz włączanie, uruchamianie i maskowanie operacji.

  • systemctl start, systemctl stop: natychmiast uruchamia (zatrzymuje) dane urządzenie ;
  • systemctl enable, systemctl disable: oznacza (odznacza) jednostkę do automatycznego uruchamiania w czasie uruchamiania (w sposób specyficzny dla jednostki, opisany w jej [Install]rozdziale);
  • systemctl mask, systemctl unmask: nie zezwala (zezwala) na wszelkie próby uruchomienia danej jednostki (ręcznie lub jako zależność dowolnej innej jednostki, w tym zależności od domyślnego celu rozruchu). Zauważ, że znakowanie dla autostartu w systemd jest realizowane przez dodanie sztucznej zależności od domyślnego celu rozruchu do danej jednostki, więc „maska” również uniemożliwia autostart.

Tak więc wszystkie są odrębnymi operacjami. Z nich chcesz systemctl enable.

Ref .: systemctl (1) .

Więcej informacji: Lennart Poettering (2011-03-02). „Trzy poziomy wyłączenia” . systemd dla administratorów . 0pointer.de.

intelfx
źródło
Chcę tylko, aby nginx ładował się przy starcie systemu. Myślałem, że systemctl może mi pomóc dowiedzieć się, dlaczego tak się nie dzieje.
j0h
@ j0h: Ponownie przeczytaj moją odpowiedź. Opisałem, dlaczego nie uruchamia się automatycznie i co zrobić, aby uruchomić się automatycznie. Wskazówka: ostatnie zdanie.
intelfx
Link przekierowuje do strony 404, a ja użyłem systemctl, aby włączyć nginx. Po ponownym uruchomieniu komputer nadal nie działał. być może powinienem spróbować systemctl enable nginx.service
j0h
1
@ j0h: Mam na myśli zdanie, a nie odniesienie. (BTW, przepraszam za zepsuty link - naprawiony teraz.) I tak, przeczytaj go jeszcze raz, potrzebujesz systemctl enable(nie systemctl start), aby coś zaczęło się przy rozruchu.
intelfx
2

Naprawiono link w zaakceptowanej odpowiedzi, który przekierowuje na właściwą stronę. Ale tutaj jest odpowiedni kawałek:

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

gdzie /lib/systemd/system/nginx.servicewygląda coś takiego:

# 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
źródło
Użyj TERM zamiast QUIT, aby Nginx nie opuścił przestarzałego gniazda Unixa i nie powiódł się przy kolejnym uruchomieniu ( trac.nginx.org/nginx/ticket/753 )
niebezpieczeństwo89
2

Oto, co dla mnie zadziałało: https://web.archive.org/web/20150328063215/https://longhandpixels.net/blog/2014/02/install-nginx-debian-ubuntu

Zignorowałem większość dokumentu, który był specyficzny dla kompilowania innych wersji nginx, i przeszedłem do „Make it Autostart”.

Postępowałem zgodnie ze wskazówkami, a teraz po ponownym uruchomieniu nginx 1.9 działa.

Doceniam wszystkim pomoc i wgląd. Dziękuję wam wszystkim!

j0h
źródło
4
Nie upuszczaj linków jako odpowiedzi: dodaj odpowiednie informacje, aby odpowiedź nie była zależna od zewnętrznego źródła ...
jasonwryan
4
W rzeczywistości teraz zasoby zewnętrzne zniknęły ... Zobacz na web.archive: web.archive.org/web/20150328063215/https://longhandpixels.net/…
przepisano
1

z zasobów 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
źródło