5
5

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 3 years have passed since last update.

Supervisor入門

Last updated at Posted at 2020-03-28

Supervisorとは

プロセスの制御・管理を行えるシステム。

具体的には、プロセスをデーモン化し、クラッシュした際の再起動などを行ってくれます。

例えば、私のアサインしているプロジェクトではLaravelのキューワーカーを使用し、プログラムを継続して並行稼働する際に重宝しています。

ただ、Windowsユーザーには残念ですが、UNIXライクなのでWindowsでは起動しません。

公式ドキュメント
http://supervisord.org/running.html#adding-a-program

この記事について

Supervisorの基本的な使い方について必要最小限の内容を書いていきます。

インストール

今回はAWSで適当に立ち上げたEC2インスタンス上で、実践していきます。

サーバーアクセス〜スーパーユーザー切り替え

...$ ssh -i ~/.ssh/udemy_sample2.pem ec2-user@54.65.141.153
[ec2-user@ip-172-31-37-208 ~]$ sudo su -

supervisorをインストール
詳しく調べていませんが、easy_installがいいらしいです。

[root@ip-172-31-37-208 ~]# sudo easy_install supervisor
Searching for supervisor
Reading https://pypi.python.org/simple/supervisor/
Downloading https://files.pythonhosted.org/packages/ca/1f/07713b0e1e34c312450878801d496bce8b9eff5ea9e70d41ff4e299b2df5/supervisor-4.1.0-py2.py3-none-any.whl#sha256=a76b2f77a560f2dc411c0254a4eb15f555e99faac48621b0f1fc9ab013944f47
Best match: supervisor 4.1.0
Processing supervisor-4.1.0-py2.py3-none-any.whl
Installing supervisor-4.1.0-py2.py3-none-any.whl to /usr/lib/python2.7/site-packages
writing requirements to /usr/lib/python2.7/site-packages/supervisor-4.1.0-py2.7.egg/EGG-INFO/requires.txt
Adding supervisor 4.1.0 to easy-install.pth file
Installing echo_supervisord_conf script to /usr/bin
Installing pidproxy script to /usr/bin
Installing supervisorctl script to /usr/bin
Installing supervisord script to /usr/bin

Installed /usr/lib/python2.7/site-packages/supervisor-4.1.0-py2.7.egg
Processing dependencies for supervisor
Finished processing dependencies for supervisor

構成ファイルの作成

[root@ip-172-31-37-208 ~]# echo_supervisord_conf > /etc/supervisord.conf

構成ファイルがetc配下に置かれます。

デーモン化するプログラムの追記(個別管理しない場合)

構成ファイルを個別管理しない場合はsupervisord.confに以下のようにデーモン化したいプログラムを追記してください。

supervisord.conf
[program:foo]
command=/bin/cat

デーモン化するプログラムの追記(個別管理する場合)

構成ファイルを個別管理する場合は以下の手順で進めてください。

個別のプログラム構成ファイル保管用ディレクトリ作成

[root@ip-172-31-37-208 ~]# mkdir /etc/supervisord.d

supervisord.confの修正

変更箇所(変更前)

supervisord.conf
;[include]
;files = relative/directory/*.ini

変更箇所(変更後)

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

これで、/etc/supervisord.d配下に作成する個別の構成ファイルも読み込むようになります。

個別のプログラム構成ファイル作成

[root@ip-172-31-37-208 ~]# vi /etc/supervisord.d/foo.conf

以下のように作成

foo.conf
[program:foo]
command=/bin/cat

使用するコマンドについて

supervisord

supervisorの起動に使用します。

プログラムの細かい操作等では使用しません。

supervisorctl

実行されたプログラムの操作で使用します。詳しい操作方法は以下URLを参照。

Supervisorの起動〜プログラムの実行

Supervisorを起動。

[root@ip-172-31-37-208 ~]# /usr/bin/supervisord -c /etc/supervisord.conf

/usr/bin/supervisordだけでも起動しますが、その場合は構成ファイルの場所を順番に検索しに行く為、cオプションを使用し、構成ファイルの絶対パスを指定した方がよさそうです。

構成ファイルのプログラム確認。

[root@ip-172-31-37-208 etc]# /usr/bin/supervisorctl status
foo                              RUNNING   pid 29747, uptime 0:02:30

Supervisor起動時に構成ファイルに記述しているプログラムは自動で実行されるっぽいです。

試しにkill。

[root@ip-172-31-37-208 etc]# kill -9 29747
[root@ip-172-31-37-208 etc]# /usr/bin/supervisorctl status
foo                              RUNNING   pid 29761, uptime 0:00:03

プロセスIDが変わり、再起動していることを確認。

プロセスを停止してみる。

[root@ip-172-31-37-208 etc]# /usr/bin/supervisorctl stop foo
foo: stopped
[root@ip-172-31-37-208 ~]# /usr/bin/supervisorctl status
foo                              STOPPED   Mar 29 01:17 AM

プロセスが停止していることを確認。

プロセスを削除してみる。

[root@ip-172-31-37-208 etc]# /usr/bin/supervisorctl remove foo
foo: removed process group
[root@ip-172-31-37-208 etc]# /usr/bin/supervisorctl status
[root@ip-172-31-37-208 etc]#

プロセスがお亡くなりになられていることを確認。

新しいプログラムを追加し、フォアグラウンドで実行してみる。

supervisord.confに以下を追加

supervisord.conf
[program:foo2]
command=watch -n 1 `date`

構成ファイルを読み込み、プロセス開始

[root@ip-172-31-37-208 etc]# /usr/bin/supervisorctl reread
foo: available
foo2: available
[root@ip-172-31-37-208 etc]# /usr/bin/supervisorctl add foo2
foo2: added process group
[root@ip-172-31-37-208 etc]# /usr/bin/supervisorctl status
foo2                             RUNNING   pid 1177, uptime 0:00:04
[root@ip-172-31-37-208 etc]# /usr/bin/supervisorctl fg foo2
Every 1.0s: `date`                                      Sun Mar 29 04:24:25 2020

sh: Sun: command not found

フォアグラウンドでの実行を確認。

Ctl+Cで抜けられます。(もちろんプロセスはデーモン化されたまま)

コマンド一覧

よく使いそうなものを抜粋しました。

status

プロセスのステータスの状態を確認。

reread

構成ファイルの読み込み。

この段階ではプログラムは追加も削除もされない。

add <name>

構成ファイルに記述したプログラムの適用(プロセス開始)。

remove <name>

停止しているプロセスの削除。

restart <name>

プロセスの再起動。

これだけでは、構成ファイルの内容は読み込まれないので注意。

stop

プロセスの停止。

start

プロセスの開始。

update

構成ファイルの再読み込み、プログラムの再起動。

設定内容に変更のあったプログラムのみ再起動される?

reload

Supervisorのデーモンの再起動。

※詳しくは公式ドキュメント参照

まとめ

便利!!!!!

5
5
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
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?