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