share facebook facebook2 twitter menu hatena pocket slack

2014.08.08 FRI

朝の 3 分ハッキング(1) Supervisor で Sinatra アプリケーションをデーモン閣下する

川原 洋平

WRITTEN BY川原 洋平

忙しいビジネスマンの皆さん、おはようございます。なかなか「かっぱさん」と呼ばれないけどかっぱ@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 返すだけのアプリケーションを以下のように用意します。

hoge.rb
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 がデーモン化されているか確認します。

01

おお、hoge が RUNNING になっている。精が出ますな。

02

一旦、supervisorctl を exit してアプリケーションにアクセスしてみました。ちゃんと JSON が返ってきてますね。

03

あらためて supervisorctl にアクセスして status を実行してデーモン閣下の状態を確認してみます。はい、動いてますね。次に stop ${デーモン名} で hoge を止めてみます。

04

再度 supervisorctl を exit してアプリケーションにアクセスしてみました。ちゃんとアプリケーションは停止しているようです。


あっと言う間でしたね

Supervisor を使えばアプリケーションを簡単にデーモン化することが出来ました!

元記事は、こちら