デーモン化

デーモン化してくれないプログラムをどうしてもデーモン化したくなったので、こんなスクリプトを書いた。

#!/usr/bin/ruby
fork do
 Process.setsid()
 fork do
   Dir.chdir("/")
   STDIN.close()
   STDOUT.reopen("/dev/null","a")
   STDERR.reopen("/dev/null","a")
   exec(ARGV.join(" "))
 end
end

たとえばこれをrunasdaemon.rbというファイル名で保存したとしたら、

runasdaemon.rb デーモン化したいコマンド

みたいに起動する。

元のソースは結構短いから、ファイルに保存せずに無理矢理こんなことをすることもできる。

ruby -e 'fork{Process.setsid();fork{Dir.chdir("/");STDIN.close();STDOUT.reopen("/dev/null","a");STDERR.reopen("/dev/null","a");exec(ARGV.join(" "))}}' デーモン化したいコマンド

バグってたらすいません。