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ファイル)