スーパーサーバーSupervisorの導入方法をいつも忘れるのでメモ。ほとんど@hibomaが 社内Wikiにまとめてた内容のパクリですが、自宅サーバ構築とかで外から見ようと思っても見えないので。いつもありがとう、ひろやん!!
導入環境はScientific Linux 6.1です。(Upstart経由での起動の部分を、init経由での起動にすればCentOS 5系でも動作するかと思います)
Supervisorの導入
easy_installでも良いんですが、pipで導入
sudo yum -y install python-setuptools
sudo easy_install pip
sudo pip install supervisor
log用ディレクトリと、conf用ディレクトリを用意
デフォルトだと/tmp配下にログが吐かれるので、log用ディレクトリの作成
sudo mkdir /var/log/supervisor/
監視するデーモンごとに設定を分けるので、confディレクトリを用意
sudo mkdir /etc/supervisord.d
Supervisorの設定を用意
conf生成用のコマンドで作成
sudo echo_supervisord_conf > /etc/supervisord.conf
zshだとエラー(zsh: permission denied: /etc/supervisord.conf)が出てので、下記コマンドで生成。
sudo su - root -c "echo_supervisord_conf > /etc/supervisord.conf"
下記のように修正をしてます。
監視するデーモンの設定は
/etc/supervisord.d/hogehoge.ini
みたいな感じで用意します。
Hesoを監視するようにした時の設定の/etc/supervisord.d/heso.iniは下記のような感じです。
Upstart経由でSupervisorを起動
Supervisor自体が落ちたら意味がないので、Upstartで経由で起動。Supervisorが落ちたらUpstartが自動で起動。
etc/init/supervisord.conf を用意
下記コマンドで起動。
sudo initctl start supervisord
psなどでプロセスを確認して起動していればOK。supervisordをkillして自動で起動してくるかも確認。
CentOS 5とかならinittabに下記のような設定をして、init経由で起動させれば良いかと。
Supervisorの各種コマンド
supervisorctl
add -- Activates any updates in config for process/group
avail -- Display all configured processes
clear -- Clear process/multiple-process/all-process log files
fg -- Connect to a process in foreground mode
help -- Show help
maintail -- tail of supervisor main log file
open -- Connect to a remote supervisord process. (for UNIX domain socket, use unix:///socket/path)
pid -- Get the PID of supervisord.
quit exit -- Exit the supervisor shell.
reload -- Restart the remote supervisord.
remove -- Removes process/group from active config
reread -- Reload the daemon's configuration files
restart -- Restart process or group.
shutdown -- Shut the remote supervisord down.
start -- Start process or groups.
status -- Get process status info.
stop -- Stop process or group.
tail -- tail of process stdout
update -- Reload config and add/remove as necessary
version -- Show the version of the remote supervisord process
たとえばHeso用の設定を変更した場合は下記みたいな感じで設定を再読込
sudo supervisorctl reread heso
supervisorctlをzshで補完
supervisorctlコマンドをzshで補完出来るように。 functionsの下に置くと、自動で読み込まれるようになります。
sudo yum -y install hg
mkdir ~/tmp
cd ~/tmp
hg clone https://bitbucket.org/hhatto/zshcompfunc4supervisor
cd zshcompfunc4supervisor
sudo cp _supervisor* /usr/share/zsh/4.3.10/functions/