web-dev-qa-db-ja.com

Nginxデーモンの停止に失敗しています

Nginx1.0.11がインストールされたUbuntu11.04i386サーバーがあります。また、私は this init.d script を使用しています。これは、いくつかの異なる場所で見つけた唯一のスクリプトです。サーバーは正常に起動しますが、停止/リセットすると表示されます

* Stopping Nginx Server...      [fail]

もちろん、デーモンは停止せず、再起動時に構成が再ロードされません。

どうすればこれを修復できますか?

14
Hubert OG

プロセスを強制終了できない可能性があります。

/etc/init.d/(または/etc/rc.d/)にあるnginx sysvinitスクリプトを開き、nginx.pidがどこにあると思われるかを見つけます。 「/var/run/nginx.pid」のようになります。

Pidファイルがない場合は、nginx.confを開いてpid設定を探します。不一致の場合-conf値を、スクリプトが本来あるべきと考える場所に設定します。

# pid of nginx process
pid /var/run/nginx.pid;
28
pragmar

Sudo service nginx restartは次のようなものを提供します:

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()

次に、ポートによってプロセスを手動で強制終了します。

Sudo fuser -k 80/tcp(または使用しているポートを使用)

または、IDでプロセスを強制終了します。

ps -ef |grep nginx
kill <pid>
13
Roman

このコマンドを試してください:

Sudo fuser -k 80/tcp
3
WiredIn

私も同様の問題に直面していました。

通常、私はApache/apache2を使用します。

以下はあなたを助けるかもしれません:

Sudo nginx -s stop | ps -ef | grep nginx | awk {'print $2'} | xargs Sudo kill -9 | Sudo service Apache2 start

ドキュメントについては、これを参照してください Github Gist

1
suryakrupa

これは、Ubuntu 11.04を含む多くのDebianベースのディストリビューションで動作する(古い 公式のinitスクリプト に基づいて)変更したnginxinitスクリプトです。

https://github.com/hulihanapplications/nginx-init-debian

これは私のubuntuサーバーでかなりうまく機能します。お役に立てれば。

0
dhulihan

この問題の原因

  • Nginxを起動すると、nginx.conf で定義されたファイルにpidが書き込まれます。
  • service nginx stopを実行すると、PIDが/usr/lib/systemd/system/nginx.serviceに従って定義されているプロセスが停止します(パスが異なる場合があります)
    • これは、プロセスが実際に停止されていないことを意味します。
  • 再度起動しようとすると、同じポートにバインドしようとしてエラーをスローします。

基本的に、ロケーションAでPIDを書き込み、ロケーションBから読み取ろうとしています。この不整合が、この明らかに一般的な問題の根本原因のようです。

解決

適切な修正:

読み取り位置と書き込み位置の両方が同じであることを確認する必要があります。

方法?nginx.confnginx.serviceで定義されているpidファイルは同じである必要があります。

修正プログラム:

  1. lsof -i | grep nginx

これはあなたにpidを与えるでしょう。私の場合、2つありました。

  1. kill -9 pid1
  2. kill -9 pid2(必須ではない場合があります)
0
joe

これが私が変更したnginxinitスクリプトです(公式のinitスクリプトに基づいています)、スクリプトの変数を作成します

lockfile=$pidfile 

と変数

pidfile="/var/run/nginx.pid"

次に、構成ファイルを変更しました(nginx.conf)、変数を作成します

pid="/var/run/nginx.pid" 

あまりにも。

最後に、すべてのnginxコマンドを正常に使用できます。

0
user12205063