Edited at

Supervisorで複数プロセスをグループ化して、一括操作する

More than 1 year has passed since last update.


はじめに

サーバーサイドの各種常駐プロセスをdaemon化したい、というときに

Supervisor を使うと便利ですよね。

私のプロジェクトでも Supervisor を使用していますが、

複数プロセスをまとめて起動/停止するオペレーションや、各プロセスの設定を使い回す際に少しハマったのでメモ。


各プロセスの設定

今回、各プロセスの設定は hogehoge.conf に記載しておくこととします。

以下の例ではGCP CloudSQLに接続するためのcloudsql_proxyのプロセスを起動しています。


cloudsql.conf

[program:cloudsql]

command=cloud_sql_proxy -instances=hogehoge::asia-northeast1:fugafuga -dir=/cloudsql/
autostart=false
autorestart=true


supervisor.confの設定

Supervisorの大元の設定ファイルとして、 supervisor.conf があります。

こちらのファイルで先ほど作成したプロセス毎のconfファイルを読み込み、設定します。


supervisor.conf


~~~中略~~~

; The [include] section can just contain the "files" setting. This
; setting can list multiple files (separated by whitespace or
; newlines). It can also contain wildcards. The filenames are
; interpreted as relative to this file. Included files *cannot*
; include files themselves.

[include]
files = /etc/supervisor/conf.d/*.conf

[group:first_group]
programs=cloudsql
[group:second_group]
programs=cloudsql, nginx


このように設定することで、各プロセスの定義をグループ化することができます。

以下のようなコマンドを叩くと、グループ単位での操作が可能です。

~ $ supervisorctl start first_group:*

※アスタリスクをプロセス名に変えれば、プロセス単位での操作も可能です。

また、同一のconfファイルの定義をグループ間で使い回すことができるので、

サーバーの種類に応じたプロセス定義をグループ化してまとめることが出来ます。

上記の例では、 group:second_group では cloudsql のプロセスに加えて、 nginx のプロセスもグループに加えています。

このグループ化を使うことで、サーバー間で設定ファイルを個別に作らずとも

サーバー毎の設定を group にまとめて記載しておけば、起動するgroupを変えるだけで起動プロセスの制御が可能となります。