ちなみに

火曜日の空は僕を押しつぶした。

デーモン化するプロセス

こんばんは、最近はTyphoeusとかSinatraで遊んでいます。

Lingrがサービスを終了してしまったので、最低限勉強会でログが残るチャットをするためにと、Cometを勉強してChatを書いているのですが、それのテスト用にデーモンを作りたかったので調べました。
この方法をなぜ卒論書いているときに見つけられなかったのかがとても悔やまれるくらい簡単です。

exit if fork
Process.setsid
exit if fork
# your application code

2回forkしているのはforkしたプロセスは親の属する端末デバイスを引き継いでしまう可能性があるための対策らしいです。

デーモン化させたあとのPIDをファイルに書き出しておくとRakeを使って殺せたりできるので便利です。

# your app
File.open('pid', 'w') {|io| io.write $$ }

# Rakefile
namespace :app_name do
  task :start do
    sh 'your_app'
  end

  task :stop do
    pisd = File.open('pid').read.chomp.to_i
    Process.kill :KILL, pid
  end
end

これで終わらないシミュレーションをリモートのサーバで走らせられますね!


参考: Ruby: daemon (Japanese)