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。

Similar Posts:


Leave a Reply

Your email address will not be published. Required fields are marked *