web-dev-qa-db-ja.com

Nginxが停止せず、nginx.pidが見つからない

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

_$ Sudo service nginx stop
Stopping nginx:                                            [FAILED]
_

そしてnginx.pidの場所を定義する_nginx.conf_には行があります。

_# /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の後は、検索に一致するものがありません。 CentOS release 6.5 (Final)でnginx/1.4.4を使用しています。

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]
_
34
ironsand

私は最初にそれのマスタープロセスを殺すことによって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

使用してそれを殺す

殺す-9 19506

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

ps -ef | grep nginx

netstat -tulpn | grep 80

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

サービスnginx開始

37
sandeep.s85

問題

私にとって、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

その後、それは正しく現れました。

11
Patrick Boos

私はこの問題を抱えており、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

9
amurrell

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

1
matthewdaniel

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
Pete Williams

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

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

0
zymhan

Nginxを停止するには、マニュアルでその方法を確認してくださいman nginx

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

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

stop, quit, reopen, reload.
0
prosti

これを試して:

Sudo fuser -k 443/tcp
Sudo fuser -k 80/tcp

ここで見つかりました: https://www.digitalocean.com/community/questions/nginx-is-unable-to-bind-to-44

0
Komal

確認するためにもっと情報が必要ですが、あなたはすでにあなたが欲しいngnixのインスタンスではなくanother 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サーバーをシャットダウンします適切に(upstartから生成される場合、通常の「kill」が機能しない可能性があるため)、ngnixを起動してみます。その場合は、initスクリプトを編集して、他のWebサーバーの起動を停止するか、別の電源でその構成を調整できます。

0
Journeyman Geek