Nginxの停止に失敗し、nginx.pidが欠落しています


33

Nginxを停止したいのですが、このように失敗します。

$ sudo service nginx stop
Stopping nginx:                                            [FAILED]

そしてnginx.conf、nginx.pidの場所に行が定義されています。

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

しかしnginx.pid、ディレクトリにはありません/var/run/

locate nginx.pid この出力を示します。

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

しかしupdatedb、検索に一致するものがない後。でnginx / 1.4.4を使用していCentOS release 6.5 (Final)ます。

nginxデーモンを停止するにはどうすればよいですか?

編集2014/01/07

これはの出力でありps -ef | grep nginx、nginxデーモンがまだ実行されているようです。

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  

そしてsudo service nginx restart、このエラーを与えます。nginx古いものはまだ生きているので、私は起動に失敗すると思います。そして/var/log/nginx/error.log-2014017また、このエラーが含まれています。

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
システムは、nginxが実行されていない場合、nginxを停止できません。また、PIDファイルがないため、すでに停止していると思われます。ps -ef | grep nginxまたはで確認できsudo netstat -tlnp | grep nginxます。
ラダダダダ14年

1
アドバイスをしてくれてありがとう。psコマンドの結果を追加しました。
Ironsand 14年

回答:


37

最初にマスタープロセスを強制終了することにより、nginxを停止することをお勧めします。nginxが適切にシャットダウンされないのは、initスクリプトを使用して停止できないためです。

ps -ef | grep nginx

これにより、nginxマスタープロセスのPIDが表示されます。上記のように:

ルート19506 1 0 2013?00:00:00 nginx:マスタープロセス/ usr / sbin / nginx -c /etc/nginx/nginx.conf

使用して殺す

キル-19 19506

実行中のnginxプロセスがあるか、ポート80が占有されているかをもう一度確認します。ポート80にバインドされているプロセスがある場合は、PIDを特定し、強制終了できるかどうかを確認します。

ps -ef | grep nginx

netstat -tulpn | grep 80

ファイルシステムが正常であることと、/ varファイルシステムの読み取り/書き込みができることを確認してください。次に、nginxを起動します

サービスnginx開始


ありがとう!マスタープロセスを強制終了した後、nginxワーカープロセスも強制終了する必要がありました。その後、ついにnginxデーモンを起動できます。
鉄砂14年

あなたはたった今Sandeepを魂を救った!文書化のためにどうもありがとう。..
ターレ

ありがとう@ sandeep.s85。私にも役立ちます。nginxの実行中にnginx.pidファイルが失われる原因は何ですか?
Codemonkey

これは私のために再び起こりました、私はそれが何を引き起こすのかを知りたいです。
Codemonkey

私のnginxマスタープロセスは、私がそれを殺した後に生き返ります。
WTIFS

11

問題

私にとって、pidファイル名はこれらの2つのファイルで異なっていました。

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

これら2つは一致する必要があります。

修正:

それで/usr/lib/systemd/system/nginx.serviceで調整してから:

systemctl daemon-reload
systemctl start nginx

それからそれは正しく現れた。


3
どうして?Ubuntu /var/run/のシンボリックリンク/run/
Z. Zlatev

うん、それはまったく解決策ではありません。しかし、私の場合、すべてが/run/nginx.pidです。
danger89

私のnginx.confにはpid logs / nginx.pidがありました-/run/nginx.pidに変更され、修正されました、パトリックに感謝します!
phpguru

9

私にはこの問題があり、実行ps -ef | grep nginxすると、受け入れられた答えで示唆されているようにマスタープロセスを強制終了したにもかかわらず、回転し続けるワーカーが表示されました:

[~]# 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    

だからそれを修正する私の解決策はこれだけでした:pkill nginx && service nginx restart


1

私の問題はpid、2つの異なるconfファイルで指定したことです。1つの参照を削除してから.pidファイルを削除し、nginxを再度起動すると、正常に動作し始めました。


そう、PIDは/usr/lib/systemd/system/nginx-debug.serviceと/etc/nginx/nginx.confで定義されています
edmondscommerce

0

これは、nginxが以前に起動されていた場合、すぐにクラッシュすることを示しているようです。内容を確認しましたか/var/log/nginx*プロセスの実行か?

編集:また、OSとnginxのバージョンを教えていただければ、より詳細な回答を提供できます。


0

確かにもっと情報が必要ですが、すでに別の情報を持っていると思います ngnixのインスタンスではなく Webサーバー実行されているので、それを見つける必要があると思います-エラーは、ポート80が使用中であることを示していますが、何

試してくださいnetstat -tulpn-:80で終わるローカルアドレスの下のエントリを探しています-これにより、プログラム名とPIDも提供されるため、識別できます。これが私のものです-私はlighttpdを実行しており、3行目に表示されています。

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

他のWebサーバーを適切にシャットダウンし(起動がオフになった場合、通常の「キル」が機能しない可能性があるため)、ngnixを起動してみてください。その場合は、initスクリプトを編集して、他のWebサーバーの起動を停止するか、別の電源で構成を調整する必要があります。


ご協力いただきありがとうございます。netstat -tulpnショーtcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 19507/nginx。そのため、なんとかnginxがそのポートを占有しました。しかし、sandeepが言ったように、nginxプロセスを強制終了してから動作します。私はあなたの助けに感謝します!
アイアンサンド14年

0

Ubuntu 10.10および/ opt / nginx / sbinで実行されているコンパイルされたバージョンのnginxでも同様の問題がありました。

/opt/nginx/conf/nginx.confと/etc/nginx/nginx.confファイルの両方をチェックし、それらが一致することを確認します。

/etc/init.d/nginxスタートアップファイルを調整して、nginx.pidロケーションテストに一致するようにします。

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を停止するには、マニュアルの方法を確認してください man nginx

デフォルトの方法は、停止信号を使用することです nginx -s stop

本当にシンプルなはずです。オプションは次のとおりです。

stop, quit, reopen, reload.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.