Nginx durdurulamaz ve nginx.pid eksik


33

Nginx'i durdurmak istiyorum ancak bu şekilde başarısız oluyor.

$ sudo service nginx stop
Stopping nginx:                                            [FAILED]

Ve nginx.confnginx.pid'nin yerini belirleyen bir çizgi var.

# /etc/nginx/nginx.conf
pid        /var/run/nginx.pid;

Ancak nginx.piddizinde yok /var/run/.

locate nginx.pid bu çıktıyı gösterir.

/var/run/nginx.pid 
/var/run/nginx.pid.oldbin

Ancak updatedbaramadan sonra eşleşme olmaz. Nginx / 1.4.4 inç kullanıyorum CentOS release 6.5 (Final).

Nginx arka planını durdurmak için ne yapmalıyım?

Düzenleme 2014/01/07

Bu çıktı, ps -ef | grep nginxnginx arka plan programı hala çalışıyor gibi görünüyor.

ironsand 17065 16933  0 15:55 pts/0    00:00:00 grep --color nginx
root     19506     1  0  2013 ?        00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
ironsand 19507 19506  0  2013 ?        00:00:25 nginx: worker process  

Ve sudo service nginx restartbu hatayı veriyor. Sanırım nginxbaşlamıyor çünkü eskisi hala hayatta. Ve /var/log/nginx/error.log-2014017ayrıca bu hata içeriyor.

Stopping nginx:                                            [FAILED]
Starting nginx: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
                                                           [FAILED]

3
Sistem çalışmıyorsa nginx'i durduramaz ve PID dosyası olmadığından, zaten durduğundan şüpheleniyorum. Sen ile kontrol edebilirsiniz ps -ef | grep nginxveya sudo netstat -tlnp | grep nginx.
Ladadadada

1
Tavsiyeniz için teşekkürler. psKomutun sonucunu ekledim .
Ütülerve

Yanıtlar:


37

Öncelikle bu ana işlemi öldürerek nginx'i durdurmanızı tavsiye ederim. Nginx düzgün kapanmadı çünkü init betiğini kullanarak durdurulamıyor olabilir.

ps -ef | grep nginx

Bu size nginx master işleminin PID'sini gösterecektir. Yukarıda bahsettiğiniz gibi:

kök 19506 1 0 2013? 00:00:00 nginx: ana işlem / usr / sbin / nginx -c /etc/nginx/nginx.conf

Kullanarak öldür

öldür -9 19506

Çalışan herhangi bir nginx işleminin olup olmadığını veya 80 numaralı bağlantı noktasının dolu olup olmadığını bir kez daha doğrulayın. Herhangi bir işlemin 80 numaralı bağlantı noktasına bağlandığını görürseniz, PID'yi tanımlayın ve öldürülebildiğini kontrol edin.

ps -ef | grep nginx

netstat -tulpn | grep 80

dosya sisteminin iyi olduğundan emin olun ve / var dosya sistemini okuyabilir / yazabilirsiniz. Sonra nginx'i başlatın

servis nginx başlangıç


Teşekkürler! Master süreci öldürdükten sonra, nginx işçi işlemini de öldürmek zorunda kaldım. O zaman nginx daemonuna başlayabilirim.
Ütülerve

Az önce bir ruh kurtardın Sandeep! Belgeleme için çok teşekkürler ..
Thale

Sandeep.s85 @ teşekkürler. Bana da faydalı. İlgi alanı dışında nginx.pid dosyasının nginx çalışırken kaybolmasına neden olur?
Codemonkey

Bu benim için bir kez daha oldu, keşke nedenini bilseydim.
Codemonkey

Nginx master işlemim onu ​​öldürdükten sonra tekrar hayata döndü.
WTIFS

11

Sorun

Benim için pid dosya adı bu iki dosyada farklıydı:

  • /usr/lib/systemd/system/nginx.service
    • pid /var/run/nginx.pid;
  • /etc/nginx/nginx.conf
    • PIDFile=/run/nginx.pid

Bu ikisinin eşleşmesi gerek.

Düzeltme:

Bu yüzden /usr/lib/systemd/system/nginx.service de ayarladım ve sonra yaptım:

systemctl daemon-reload
systemctl start nginx

Sonra doğru geldi.


3
Nasıl olur? Ubuntu'da/var/run//run/
Z. Zlatev'in

Evet, bu hiç bir çözüm değil. Ama benim durumumda her şey / run / nginx.pid.
tehlike89

Nginx.conf dosyamda / nginx.pid mesaj panosu vardı - /run/nginx.pid olarak değiştirildi ve düzeltildi, teşekkürler Patrick!
phpguru

9

Bu problemi yaşadım ve ps -ef | grep nginxçalışanlar bana, kabul edilen cevabın önerdiği şekilde ustalık sürecini öldürmelerine rağmen, sürekli çalışmaya devam edecek çalışanları gösterecekti:

[~]# ps -ef | grep nginx
nginx    10730     1  0 Sep14 ?        00:00:16 nginx: cache manager process            
nginx    18469     1  0 Oct09 ?        00:11:02 nginx: worker process                   
nginx    25779     1  0 Oct13 ?        00:01:31 nginx: worker process                   
nginx    26458     1  0 15:45 ?        00:00:00 nginx: worker process    

Yani bunu düzeltmek için benim çözümüm şuydu:pkill nginx && service nginx restart


1

Benim sorunum pidiki farklı dosyada belirtmiş olmamdı. Bir referansı çıkardıktan sonra .piddosyayı sildim ve nginx'i tekrar başlattıktan sonra normal davranmaya başladı.


Evet, PID, /usr/lib/systemd/system/nginx-debug.service ve /etc/nginx/nginx.conf
edmondscommerce

0

Bu daha önce başlamışsa nginx'in hemen düştüğünü gösteriyor gibi görünüyor. /var/log/nginx*İşlemin ne yaptığını görmek için içeriğini kontrol ettiniz mi?

EDIT: Ayrıca, bize işletim sisteminizi ve nginx versiyonunu söylerseniz daha ayrıntılı cevaplar verebiliriz.


0

Emin olmak için daha fazla bilgiye ihtiyacım var, ama sanırım kendi istediğin ngnix örneğinden ziyade çalışan başka bir web sunucusuna sahipsin, bu yüzden bulman gerekiyor - hata portun kullanımda olduğunu söylüyor, ancak ne

Deneyin netstat -tulpn- Yerel adres altında biten bir giriş mi arıyorsunuz: 80 - bu aynı zamanda size program adını ve PID'yi verir, böylece tanımlayabilirsiniz. İşte benim - lighttpd kullanıyorum ve 3. satırda gösteriliyor.

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:5000          0.0.0.0:*               LISTEN      4684/rtorrent
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      923/php-fpm.conf)
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      972/lighttpd
tcp        0      0 0.0.0.0:6901            0.0.0.0:*               LISTEN      4684/rtorrent
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      720/sshd
tcp6       0      0 :::22                   :::*                    LISTEN      720/sshd
udp        0      0 0.0.0.0:6881            0.0.0.0:*                           4684/rtorrent

Diğer web sunucusunu kapatın düzgün (onun sonradan görme kapalı up'ı üreten beri, normal 'öldürme' değil işin olabilir) ngnix başlatmayı deneyin ve. Bu durumda, diğer web sunucusunun başlamasını durdurmak için init komut dosyalarınızı düzenleyebilir / düzenlemeniz ya da yapılandırmasını başka bir güçle ayarlamanız gerekir.


Yardımın için teşekkürler. netstat -tulpngösterir tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 19507/nginx. Yani bir şekilde nginx bu limanı işgal etti. Ama Sandeep’in dediği gibi, nginx işlemini öldürdüm, sonra çalışıyor. Yardımınız için teşekkür ederim!
Ütülerve

0

Ubuntu 10.10 ile benzer bir sorunum vardı ve / opt / nginx / sbin'de çalışan nginx'in derlenmiş bir sürümü vardı.

hem /opt/nginx/conf/nginx.conf hem de /etc/nginx/nginx.conf dosyalarını kontrol edin ve bunların eşleştiğini doğrulayın.

/Etc/init.d/nginx başlangıç ​​dosyasını, nginx.pid konum testini kullanarak eşleşecek şekilde ayarlayın:

sudo /etc/init.d/nginx configtest # should show no failures
sudo /etc/init.d/nginx start      # should show starting
sudo /etc/init.d/nginx status     # should show running
sudo /etc/init.d/nginx stop       # should show stopping -- (wait for a few)
sudo /etc/init.d/nginx status     # should show can not access PID file for nginx
sudo netstat -tap  # should not show nginx program running with open local address

0

Nginx'i durdurmak için kullanım kılavuzuna bakın man nginx.

Durdurma sinyalini kullanmak için varsayılan yol olmalıdır nginx -s stop.

Gerçekten bu kadar basit olmalı. Seçenekleriniz:

stop, quit, reopen, reload.
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.