systemd ile önyükleme sırasında nginx'i başlat


18

Debian 8 sunucusuna nginx 1.9'u yeni yükledim. nginx, çalışmasını söylediğimde iyi çalışıyor, ancak önyüklemede nginx'i otomatik olarak yüklemiyor gibi görünmüyor.

İnternette tavsiye edilen çok sayıda init komut dosyası denedim, ama henüz hiçbir şey işe yaramadı. Şimdi systemctl ile anlamaya çalışıyorum.

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

Ne yazık ki, "hizmet maskeli" nin ne anlama geldiğini bilmiyorum ve neden maskeli olduğunu bilmiyorum.

koştuğumda

sudo nginx

sunucu gayet iyi çalışıyor. Sonra nginx servisinin maskesini kaldırmaya baktım.

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

tamam cool, şimdi nctx'i systemctl kullanarak başlatabilirim. Bu yüzden yeniden başlatmanın otomatik olarak nginx yükleyip yüklemeyeceğini kontrol ettim. Ama bunu başaramıyor ve buradan nereye gideceğim konusunda hiçbir fikrim yok.

Birisi önyükleme sırasında otomatik olarak nginx çalıştırmama yardımcı olabilir mi?


6
systemctl enable nginx...
jasonwryan

Yanıtlar:


21

Etkinleştirme, başlatma ve maskeleme işlemlerini karıştırıyorsunuz.

  • systemctl start, systemctl stop: söz konusu birimi hemen başlatır (durdurur) ;
  • systemctl enable, systemctl disable: önyükleme sırasında otomatik başlatma için birimi işaretler (işaretini kaldırır) ( [Install]bölümünde açıklanan birime özgü bir şekilde );
  • systemctl mask, systemctl unmask: söz konusu üniteyi ve varsayılan önyükleme hedefinin bağımlılıkları da dahil olmak üzere tüm üniteyi başlatmaya yönelik tüm girişimleri ve girişimleri reddeder (izin verir). Systemd'de otomatik başlatma işaretlemesinin, varsayılan önyükleme hedefinden söz konusu birime yapay bir bağımlılık eklenerek uygulandığını unutmayın, bu nedenle "maske" otomatik başlatma işlemini de devre dışı bırakır.

Yani, bunların hepsi ayrı operasyonlar. Bunlardan istersiniz systemctl enable.

Referans: systemctl (1) .

Daha fazlası: Lennart Poettering (2011-03-02). "Üç Seviyesi Kapalı" . Yöneticiler için systemd . 0pointer.de.


Sadece nginx'in önyüklemede yüklenmesini istiyorum. Systemctl'in neden olmadığını anlamaya yardımcı olabileceğini düşündüm.
j0h

@ j0h: Cevabımı tekrar oku. Neden otomatik başlatma yapmadığını ve otomatik başlatma için ne yapılacağını açıkladım. İpucu: son cümle.
intelfx

Bağlantı bir 404 sayfasına yönlendiriyor ve nginx'i etkinleştirmek için systemctl kullandım. Yeniden başlattığımda hala çalışmıyordu. belki sistemctl enable nginx.service denemeliyim
j0h

1
@ j0h: Cümle demek istedim, referans değil. (BTW, kırık bağlantı için özür dilerim - şimdi düzeltildi.) Ve evet, bir kez daha okuyun , önyüklemede bir şey başlatmak için systemctl enable(değil systemctl start) gerekir .
intelfx

2

Kabul edilen yanıttaki bağlantı düzeltilerek sağ sayfaya yönlendirilmesi sağlandı. Ama işte alakalı bir bit:

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

Nereye /lib/systemd/system/nginx.servicebenziyor:

# 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

`

Nginx'in eski Unix soketinden çıkmasını ve bir sonraki başlangıcının başarısız olmasını önlemek için QUIT yerine TERM kullanın ( trac.nginx.org/nginx/ticket/753 )
danger89

2

Benim için çalışan heres: https://web.archive.org/web/20150328063215/https://longhandpixels.net/blog/2014/02/install-nginx-debian-ubuntu

Nginx'in diğer sürümlerini derlemeye özgü olan belgenin çoğunu görmezden geldim ve "Autostart Yap" a geçtim.

Oradaki talimatları takip ettim ve şimdi yeniden başlattığımda, nginx 1.9 çalışıyor.

Kesinlikle herkesin yardım ve anlayış için teşekkür ederiz. Hepinize teşekkür ederim!


4
Lütfen bağlantıları sadece yanıt olarak bırakmayın: cevabın harici bir kaynağa bağlı olmaması için ilgili bilgileri ekleyin ...
jasonwryan

4
Aslında artık dış kaynak gitti ... Web.archive'da görün: web.archive.org/web/20150328063215/https://longhandpixels.net/…
yeniden yazıldı

1

nginx kaynaklarından 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.