unicornでリロードを

unicornで設定ファイルやら、スクリプトなんかをリロードさせようと思うとちょっと面倒。
3段階でシグナルを送ってやらないといけない。
http://unicorn.bogomips.org/SIGNALS.html

#まずは、サンプルのスクリプト
hiro@Mac-mini% cat main.rb
require 'sinatra/base'
class Main < Sinatra::Base
get '/' do
'foo'
end
end
hiro@Mac-mini% cat config.ru
require './main'
run Main.new

#unicornをデーモンで動かす。
hiro@Mac-mini% unicorn -D
hiro@Mac-mini% ps x|grep unicorn
854 ?? R 0:00.02 unicorn master -D -l0.0.0.0:8080
855 ?? R 0:00.33 unicorn worker[0] -D -l0.0.0.0:8080

#マスタープロセスにUSR2シグナルを送ると、新しいマスタープロセスが生まれる。
hiro@Mac-mini% kill -USR2 854
hiro@Mac-mini% ps x|grep unicorn
854 ?? S 0:00.27 unicorn master (old) -D -l0.0.0.0:8080
855 ?? S 0:00.58 unicorn worker[0] -D -l0.0.0.0:8080
860 ?? S 0:00.49 unicorn master -D -l0.0.0.0:8080
861 ?? S 0:00.32 unicorn worker[0] -D -l0.0.0.0:8080#

#古いマスタープロセスにWINCHシグナルを送ると、その下のワーカープロセスが終了する。
hiro@Mac-mini% kill -WINCH 854
hiro@Mac-mini% ps x|grep unicorn
854 ?? S 0:00.32 unicorn master (old) -D -l0.0.0.0:8080
860 ?? S 0:00.54 unicorn master -D -l0.0.0.0:8080
861 ?? R 0:00.37 unicorn worker[0] -D -l0.0.0.0:8080

#最後に、QUITシグナルで古いマスタープロセスを終了させる。
hiro@Mac-mini% kill -QUIT 854
hiro@Mac-mini% ps x|grep unicorn
860 ?? S 0:00.56 unicorn master -D -l0.0.0.0:8080
861 ?? S 0:00.39 unicorn worker[0] -D -l0.0.0.0:8080