Python製Foremanクローンのhonchoを使ってみた
2013-05-09 - ⧖ 2.0 minForeman はProcfileベースのプロセス管理ライブラリで、 honcho はそのPythonポーティングです。
便利そうなので使ってみます。 honchoの最新リリースバージョンは0.4.0 です。
インストールから起動まで
インストール
$ pip install honcho
今回はbottle.pyを使ったWebアプリを2つ起動してみます。
# app.py
import sys
from bottle import run
def main ():
run (port = int (sys .argv [1 ]))
if __name__ == '__main__' :
main ()
# Procfile
web1: python app.py 8081
web2: python app.py 8082
設定ファイルをチェックして起動してみます。
$ honcho check
INFO: Valid procfile detected (web1, web2)
$ honcho start
23:44:18 web1.1 | started with pid 7117
23:44:18 web2.1 | started with pid 7118
23:44:18 web1.1 | Bottle v0.11.6 server starting up (using WSGIRefServer())...
23:44:18 web1.1 | Listening on http://127.0.0.1:8081/
23:44:18 web1.1 | Hit Ctrl-C to quit.
23:44:18 web2.1 | Bottle v0.11.6 server starting up (using WSGIRefServer())...
23:44:18 web2.1 | Listening on http://127.0.0.1:8082/
23:44:18 web2.1 | Hit Ctrl-C to quit.
^CSIGINT received
23:44:20 system | sending SIGTERM to all processes
23:44:20 system | sending SIGTERM to pid 7118
23:44:20 web1.1 | process terminated
23:44:20 web2.1 | process terminated
設定ファイルのエクスポートは upstart にしか対応してないみたいです。
$ honcho export upstart .
$ ls -ltr
-rw-r--r-- 1 root root 328 May 8 19:38 testhoncho.conf
-rw-r--r-- 1 root root 56 May 8 19:38 testhoncho-web2.conf
-rw-r--r-- 1 root root 213 May 8 19:38 testhoncho-web2-1.conf
-rw-r--r-- 1 root root 56 May 8 19:38 testhoncho-web1.conf
-rw-r--r-- 1 root root 213 May 8 19:38 testhoncho-web1-1.conf
$ honcho export inittab .
usage: honcho export [-h] [-e ENV] [-d APP_ROOT] [-f PROCFILE] [-s SHELL]
[-u USER] [-c process=num,process=num] [-p N] [-l DIR]
[-a APP]
FORMAT LOCATION
honcho export: error: argument FORMAT: invalid choice: 'inittab' (choose from 'upstart' )
Supervisord用の設定ファイルをエクスポートする
upstart にしか対応していないと思いきや、 GitHubリポジトリをみるとSupervisordに対応しているではありませんか!!
以下のような感じで導入できます。
$ pip install --upgrade git+git://github.com/nickstenning/honcho.git
$ honcho export supervisord -a fooapp dummydir
$ cat dummydir/app.conf
[program:fooapp-web1]
command =python app.py 8081
autostart =true
autorestart =true
stopsignal =QUIT
stdout_logfile =/var/log/fooapp/web1-1.log
stderr_logfile =/var/log/fooapp/web1-1.error.log
user =root
directory =/home/hattori/tmpapp
environment =PORT="5000"
[program:fooapp-web2]
command =python app.py 8082
autostart =true
autorestart =true
stopsignal =QUIT
stdout_logfile =/var/log/fooapp/web2-1.log
stderr_logfile =/var/log/fooapp/web2-1.error.log
user =root
directory =/home/hattori/tmpapp
environment =PORT="5100"
[group:fooapp]
programs =fooapp-web1,fooapp-web2
設定ファイルが作成されるので、 所定のディレクトリに置いてリロードすればOK。
$ cp -p dummydir/fooapp.conf /etc/supervisor/conf.d/
$ supervisorctl reload
いいですね。 パイロット段階では honcho start 使って、 恒久的に動かしたくなったらsupervisord用の設定ファイルを書き出して、 supervisordから起動すればOKと。
Zsh補完関数
あとネタがないので、 honchoのZsh補完関数 書いてみました。 よかったら使ってみてください。
ちなみに
foremanもhonchoも 管理者 みたいな意味なんですね。