RakeでTokyoTyrant serverを起動/終了

tokyotyrantはttserverというコマンドで起動する。
ソースからインストールしたら /usr/local/sbin/ttservctl という管理用shell scriptがあったので、それを参考にとりあえず start, stop, restartだけrake taskにした
pidファイルがserver実行中だけ作られるのでそれを見てkillしたりするだけ
起動パラメータは全て一番上のhashに書いてある


Rakefile

require 'rubygems'

tt = {
  :cmd => 'ttserver',
  :basedir => File.dirname(__FILE__)+'/ttserver',
  :port => 11978,
  :pidfile => File.dirname(__FILE__)+'/ttserver/pid',
  :dbname => File.dirname(__FILE__)+'/ttserver/test.tch#bnum=1000000'
}

desc 'start TokyoTyrant server'
task 'ttstart' do
  Dir.mkdir(tt[:basedir]) if !File.exists?(tt[:basedir])
  puts ''
  puts 'starting TokyoTyrant server..'
  if File.exists?(tt[:pidfile])
    pid = open(tt[:pidfile]).read
    puts "existing process - pid:#{pid}"
  else
    puts `#{tt[:cmd]} -port #{tt[:port]} -dmn -pid #{tt[:pidfile]} #{tt[:dbname]}`
    puts 'done'
  end
end

desc 'stop TokyoTyrant server'
task 'ttstop' do
  puts ''
  puts 'stopping TokyoTyrant server..'
  if File.exists?(tt[:pidfile])
    pid = open(tt[:pidfile]).read
    puts `kill -TERM #{pid}`
    count = 0
    loop do
      sleep 0.1
      if !File.exists?(tt[:pidfile])
        puts 'done'
        break
      end
      if (count+=1) > 100
        puts "hanging process - pid:#{pid}"
        break
      end
    end
  else
    puts 'no process found'
  end
end

desc 'restart TokyoTyrant server'
task 'ttrestart' => ['ttstop', 'ttstart']
rake ttstart
rake ttrestart
rake ttstop