rubotyをデーモンとして動かす
Herokuで動かしてたりdockerでデプロイしてたりするとあまり旨味はないのかもしれないけど、普通にcapistranoでデプロイして動かしたいようなときもあるのでやってみた。
下記のスクリプトを例えばyour_ruboty/lib/daemonize.rb
みたいな場所に置いておく。
# nochdir: true - 相対パスでファイルの読み込みをするプラグインがあったときに # 不具合の出ないように # noclose: false - capistranoでデプロイしたときに制御端末を切り離すために Process.daemon(true, false) # killしやすいようにPIDを書き出す require "fileutils" pid = File.expand_path("/tmp/ruboty.pid", __FILE__) FileUtils.mkdir_p(File.dirname(pid)) File.open(pid, "w") { |f| f.write Process.pid }
そして起動時に--load
オプションで上記のスクリプトを指定して読み込んでやればデーモンとして動いてくれる。
$ bundle exec ruboty --dotenv --load lib/daemonize.rb
killしたいときはPIDファイルを見て適当にシグナルを送ってやればいい。
$ kill -TERM $(cat /tmp/ruboty.pid)
追記
PIDファイルとデーモン化のオプションがそれぞれ本体に取り込まれたので、追々上記のようなことは不要になる。
追々記
ruboty 1.3.0から--daemon
オプションと--pid <path>
オプションが導入された。