Python製Foremanクローンのhonchoを使ってみた
Posted on Thu, 09 May 2013 01:35:07 +0900
Foreman は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も 管理者 みたいな意味なんですね。