CentOS 7上のnginxで終了時にUNIXソケットが削除されない問題

  • 5
    Like
  • 0
    Comment
More than 1 year has passed since last update.

CentOS 7上にnginxをnginxリポジトリからインストールし、Unixソケットを使った場合、nginxを終了した際にUnixソケットが削除されず、nginxが再起動されないトラブルが発生します。

環境

  • CentOS 7
  • nginxリポジトリからインストールしたnginx 1.8.0 (※CentOS標準のリポジトリからインストールしたものに同様の問題があるかは調べていません)

原因

原因はsystemdのUnit設定ファイル(/usr/lib/systemd/system/nginx.service)に定義されている終了処理で

ExecStop=/bin/kill -s QUIT $MAINPID

と記述されているのですが、SIGQUITではUnixソケットが削除されず、次回起動時にソケットファイルが存在するため「Address already in use」のエラーとなり起動しなくなります。

解決方法

ExecStop=/bin/kill -s TERM $MAINPID

のように書き換えることでこの問題は解決します。
書き換えた後のnginx.serviceファイル

参考文献

Nginx leaves old socket – StackExchange