忙しいビジネスマンの皆さん、おはようございます。なかなか「かっぱさん」と呼ばれないけどかっぱ(@inokara)です。
はじめに
朝の 3 分間でハッキングしてみたいと思います。今日のお題は Supervisor と Sinatra です。Supervisord を使って Sinatra アプリケーションを手軽にデーモン閣下してみたいと思います。
尚、 3 分という短い時間でのご紹介となりますので supervisord ってなに?とか Sinatra ってなに?とかのご質問には答え兼ねますのでご容赦下さい。そんな時にはおググり下さいませ。
下ごしらへ
はい、既に EC2 インスタンスは用意させて頂いております。OS は Amazon Linux でございます。
Supervisor と Sinatra のインストール
sudo yum install python-setuptools
easy_install supervisor
sudo gem install sinatra --no-ri --no-rdoc -V
Supervisor は service コマンドで実行したいのでこちらのように init スクリプトを用意して /etc/init.d/supervisord に置きます。
sudo chmod 755 /etc/init.d/supervisord
さらにパーミッションを設定しておきます。
Supervisor の設定
次に Supervisor の設定です。ダマになるので手際よくいきます。
sudo echo_supervisord_conf > /etc/supervisord.conf
echo "[include]" >> /etc/supervisord.conf
echo "files = supervisord/conf/*.conf" >> /etc/supervisord.conf
こちらを参考にさせて頂きました。一行目で supervisord.conf のひな形が生成されます。
Sinatra アプリケーション
JSON 返すだけのアプリケーションを以下のように用意します。
require 'sinatra'
require 'json'
get '/hello' do
v = {
key1: "a",
key2: "b",
}
v.to_json
end
このスクリプトを hoge.rb として適当な場所に置いておきましょう。
Supervisor から hoge.rb をデーモン化する
hoge.rb をデーモン化する設定を下記のように設定して /etc/supervisord/conf/hoge.conf として設置します。
[program:hoge]
command = /usr/bin/ruby /path/to/hoge.rb
process_name = hoge
autostart = true
autorestart = true
調理しながら試食
出来る(かどうか知らないけど)ビジネスマンは調理しながら試食、走りながら考えます。
Supervisor の起動
ほとんど下ごしらえになってしまいましたが、以下のように supervisor を起動します。
service supervisord start
正常に起動したらいよいよ確認です。
supervisorctl
Supervisor には supervisorctl というツールでデーモン化したプロセスの管理が可能です。supervisorctl を実行してちゃんと hoge.rb がデーモン化されているか確認します。
おお、hoge が RUNNING になっている。精が出ますな。
一旦、supervisorctl を exit してアプリケーションにアクセスしてみました。ちゃんと JSON が返ってきてますね。
あらためて supervisorctl にアクセスして status を実行してデーモン閣下の状態を確認してみます。はい、動いてますね。次に stop ${デーモン名} で hoge を止めてみます。
再度 supervisorctl を exit してアプリケーションにアクセスしてみました。ちゃんとアプリケーションは停止しているようです。
あっと言う間でしたね
Supervisor を使えばアプリケーションを簡単にデーモン化することが出来ました!
元記事は、こちら