80
84

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

各種ミドルウェアをSupervisorで管理する

Last updated at Posted at 2014-05-12

プロセスが落ちた際の自動再起動をしたい場合や、Docker の1つのコンテナの中に各種ミドルウェアをまるっと入れる場合などでアプリケーションの動作に必要なミドルウェアを Supervisor で一元管理したいときがあります。

Supervisor: A Process Control System
http://supervisord.org/

Supervisor でデーモンを管理する場合、デーモンをフォアグラウンドで起動させる必要がありますのでミドルウェアの設定変更が必要になる場合があります。その方法についてまとめます。

※CentOS での実行パスなどをベースで記載していますので、各種ミドルウェアの起動パスなどが異なる場合にはお使いのディストリビューションに書き換える必要があります。

Nginx

設定ファイルを書き換えてもいいのですが、起動オプションで設定を上書きすることができますので -g "daemon off;" を起動オプションに指定します。

また、Nginx はフォークされたプロセスのユーザーは Nginx の設定ファイルに記載しますので、Supervisor で起動するプロセスの実行ユーザーは root のままとします。

/etc/supervisor.d/nginx.conf
[program:nginx]
command=/usr/sbin/nginx -g "daemon off;"
autostart=true
autorestart=true

MySQL

MySQL では起動したプロセスではなく、フォークされたプロセスの監視を行う必要があります。これについては Supervisor が提供している pidproxy というプログラムを利用して監視します。

Subprocesses
http://supervisord.org/subprocess.html#pidproxy-program

Nginx と同様、フォークされるプロセスは実行時のオプションで指定しますので root のままとします。

/etc/supervisor.d/mysqld.conf
[program:mysqld]
command=/usr/bin/pidproxy /var/run/mysqld/mysqld.pid /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql
autostart=true
autorestart=true

MongoDB

MongoDB では設定ファイルに fork して起動する設定がありますので、fork = true と設定ファイルに記載されている場合は fork = false に変更する必要があります。

/etc/mongodb.conf
 ##
 bind_ip = 0.0.0.0
 port = 27017
-fork = true
+fork = false
 pidfilepath = /var/run/mongodb/mongodb.pid
 logpath = /var/log/mongodb/mongodb.log
 dbpath =/var/lib/mongodb

起動するプロセスはフォークされずフォアグラウンドで実行されますので、root 以外の適切なユーザー名で実行させます。今回は MongoDB を RPM からインストールした際に作成された mongodb ユーザーを user=mongodb として指定しています。

/etc/supervisor.d/mongod.conf
[program:mongod]
command=/usr/bin/mongod -f /etc/mongodb.conf
autostart=true
autorestart=true
user=mongodb

Redis

Redis はバージョン 2.6 からコマンドラインから設定ファイルの値を指定することもできますが、バージョンに依存しないよう設定ファイルの値を変更することとします。

手順は MongoDB とほぼ同様、設定ファイルの中で daemonize yes と記載があったら daemonize no へ変更します。

/etc/redis.conf
# By default Redis does not run as a daemon. Use 'yes' if you need it.
# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
-daemonize yes
+daemonize no

# When running daemonized, Redis writes a pid file in /var/run/redis.pid by
# default. You can specify a custom pid file location here.

Redis も実行ユーザーでプロセスが立ち上がるので、redis ユーザーで起動させるため user=redis と指定します。

/etc/supervisor.d/redis.conf
[program:redis]
command=/usr/sbin/redis-server /etc/redis.conf
autostart=true
autorestart=true
user=redis

php-fpm

php-fpm の場合、Nginx と同様起動時のオプションでフォアグラウドで起動するよう指定ができますので --nodaemonize とオプションに指定しておきます。

php-fpm では起動される pool ごとに実行時ユーザーを設定ファイルで記載しますので、実行時のユーザーは root のままとします。

/etc/supervisor.d/php-fpm.conf
[program:php-fpm]
command=/usr/sbin/php-fpm --nodaemonize
autostart=true
autorestart=true

その他のミドルウェアやアプリケーションサーバーを起動させる場合のポイント

以上、一部のミドルウェアでの設定・起動例を挙げましたが、他のミドルウェアやアプリケーションサーバーでは

  • フォアグラウドで実行させること
  • Supervisor の設定にもよりますが、実行時ユーザーを指定しないと root で起動されるので気をつける

という点に注意しながら設定ファイルを書くといいでしょう。

80
84
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
80
84

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?