Supervisorをちょこっとさわっておく

相変わらずDockerの日々で、最近はWordpressのコンテナ作り。
参考サイトがないとなかなか難しいですが、ある程度は出来てきました。しかし、そのなかで使われているSupervisorというものをあんまり知らないので、ちょこっと触っとこうと思います。

Dockerもkvmもだけど、仮想化は小さい基礎の積み重ねが大事だなと、色々調べていると感じます。LPIC3-4がまるっと仮想化ってのはなかなか粋ですな。

SupervisorはMonitと同じくプロセス監視の役割をするもののようです。
たけけんもスクリプトでLoadaverageとhttpdの監視するCronを動かしてますが、こやつらはそれそのものを監視しているので、GUIを使えばhttpdを止めたりもできるようになってます。

Dockerではこういったものを併用するのは基本のようですね。

supervisorのインストールのだけども
epelのリポジトリを用意をして、yumでsupervisorをインストールする方法
Pythonのeasy_installを使う方法
の2通りがあるのだが、どちらもちょこっと触ったところ、easy_installを使った方法の方がやりやすい感じがしたので、easy_installを使ってsupervisorを使う方にします。

ちなみにyumの場合のバージョンは2.1系です。ちょっち古い??

[root@testserver]# yum --enablerepo=epel install supervisor

====================================================================================================
 Package                    Arch                 Version                   Repository          Size
====================================================================================================
Installing:
 supervisor                 noarch               2.1-8.el6                 epel               292 k
Installing for dependencies:
 python-meld3               x86_64               0.6.7-1.el6               epel                71 k

 

では進めていきます。インストールはこんな風にします。

# easy_install supervisor

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

echo_supervisord_conf コマンドで初期設定が出力されるようなので、/etc/supervisord.conf にリダイレクトします。

# echo_supervisord_conf > /etc/supervisord.conf

一応、yumでインストールした場合のconf

# grep -v "^;" /etc/supervisord.conf | grep -v "^$"                [/root]
[supervisord]
http_port=/var/tmp/supervisor.sock ; (default is to run a UNIX domain socket server)
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB       ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10          ; (num of main logfile rotation backups;default 10)
loglevel=info               ; (logging level;default info; others: debug,warn)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false              ; (start in foreground if true;default false)
minfds=1024                 ; (min. avail startup file descriptors;default 1024)
minprocs=200                ; (min. avail process descriptors;default 200)
[supervisorctl]
serverurl=unix:///var/tmp/supervisor.sock ; use a unix:// URL  for a unix socket

echo_supervisord_conf の出力したものとだいたい一緒です。

プロセスの監視をするために、各設定ファイルをincludeする記述を追加します。

138 ;[include]
139 ;files = relative/directory/*.ini
140 [include]
141 files = /etc/supervisord.d/*.conf
# mkdir -p /etc/supervisord.d

設定ファイルは長くなるならミドルウェアごとになるだろうし、短ければまとめちゃったらいいと思う。

参考サイト
qiita yujiodさん 各種ミドルウェアをSupervisorで管理する

yujiodさんのconfファイルを参考に、nginxの記述を追加する。

そして実行してエラーがでなければOKだ。

# supervisord                                                            
/usr/lib/python2.6/site-packages/supervisor-3.0-py2.6.egg/supervisor/options.py:295: UserWarning: Supervisord is running as root and it is searching for its configuration file in default locations (including its current working directory); you probably want to specify a "-c" argument specifying an absolute path to a configuration file for improved security.
  'Supervisord is running as root and it is searching '

起動が終わったらプロセスを確認してみる。

# supervisorctl status                                                  
nginx                            RUNNING    pid 1404, uptime 0:00:18

参考サイト
memorycraft  Dockerってなんじゃ?

memorycraftさんの起動スクリプトを使わせていただく。

[root@kensho]# vi /etc/init.d/supervisord                     
[root@kensho]# chmod 755 /etc/init.d/supervisord                 
[root@kensho]# /etc/init.d/supervisord status                 
supervisord (pid 1403) を実行中..
[root@kensho]# /etc/init.d/supervisord stop                                      
supervisord を停止中:                                      [  OK  ]

inet_httpを有効にすればGUI使えます。

 16 [inet_http_server]         ; inet (TCP) server disabled by default
 17 ;port=127.0.0.1:9001        ; (ip_address:port specifier, *:port for all iface)
 18 port=0.0.0.0:9001        ; (ip_address:port specifier, *:port for all iface)

supervisor

なかなかイカスね。

見よう見まねでhttpdで試してみた。

# cat /etc/supervisord.d/set.conf 

[program:httpd]
command=/usr/sbin/httpd -D FOREGROUND
autostart=true
autorestart=true

プロセスを見るとこうなるようだ。

# ps aux | grep httpd                                                          [/root]
root      1660  0.0  0.4 175828  4808 ?        S    17:50   0:00 /usr/sbin/httpd -D FOREGROUND
apache    1661  0.0  0.2 175828  2520 ?        S    17:50   0:00 /usr/sbin/httpd -D FOREGROUND
apache    1662  0.0  0.2 175828  2520 ?        S    17:50   0:00 /usr/sbin/httpd -D FOREGROUND
apache    1663  0.0  0.2 175828  2520 ?        S    17:50   0:00 /usr/sbin/httpd -D FOREGROUND
apache    1664  0.0  0.2 175828  2520 ?        S    17:50   0:00 /usr/sbin/httpd -D FOREGROUND
apache    1665  0.0  0.2 175828  2520 ?        S    17:50   0:00 /usr/sbin/httpd -D FOREGROUND

ふむふむ。

とりあえずこれくらいでいいかな。

次回はまたDocker。

Related Posts


投稿者: Takeken

インターネット利用者のITリテラシーを向上したいという設定の2次元キャラです。 サーバー弄りからプログラミングまで手を付けた自称エッセイストなたけけんの物語。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です