はじめに
サーバーサイドの各種常駐プロセスをdaemon化したい、というときに
Supervisor
を使うと便利ですよね。
私のプロジェクトでも Supervisor
を使用していますが、
複数プロセスをまとめて起動/停止するオペレーションや、各プロセスの設定を使い回す際に少しハマったのでメモ。
各プロセスの設定
今回、各プロセスの設定は hogehoge.conf
に記載しておくこととします。
以下の例ではGCP CloudSQLに接続するためのcloudsql_proxyのプロセスを起動しています。
[program:cloudsql]
command=cloud_sql_proxy -instances=hogehoge::asia-northeast1:fugafuga -dir=/cloudsql/
autostart=false
autorestart=true
supervisor.confの設定
Supervisorの大元の設定ファイルとして、 supervisor.conf
があります。
こちらのファイルで先ほど作成したプロセス毎の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を変えるだけで起動プロセスの制御が可能となります。