それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

RubyでDemonizeするときのオプションとか使い方とか

init.dスクリプト作りたいと思った。でもBashだと邪魔くさいいのでマイブームのRubyでやってみる.

スクリプトをDaemon化する rubygem Daemons


DaemonsはRubyのスクリプトを簡単にデーモンにすることができるツール.
仕組みはForkしてSetUIDで、かつThreadをあげてるっぽい。

使い方、メインのループを作る。メインループをDaemonのProcに入れる.

インストール

gem install daemons

使い方:

my_daemon.rbを起動ファイルとします

my_daemon.rb
require 'rubygems'
require 'daemons'

Daemons.run_proc(){
	loop{
		sleep 1
	}
}

run_proc はブロック{}を引数にとってブロック(Proc)をDaemonとして実行する.
run_proc を使った場合,このファイル自身が起動コマンドになる

起動方法

my_daemon.rb start        #起動
my_daemon.rb stop         #終了
my_daemon.rb --help       #使い方

ポイント:このファイル自身が起動スクリプトになるよ!

使い方2:外部スクリプト指定する場合.

バックグラウンド実行プロセスはProcではなく、既存のスクリプトをDaemon化する。

require 'rubygems'
require 'daemons'

Daemons.run("my_wathcer.pl --server=192.168.2.1")

別のスクリプトを指定するには、run を使う.引数にコマンドを取る.


簡単ですね。

start/stop/restart は要らない場合

start/stop コマンドは自分で作るから要らないよ!って場合には Daemons.callを使うみたいよ

require 'rubygems'
require 'daemons'

Daemons.call(){
	loop{
		sleep 1
	}
}


これでいつでも起動しっぱなしになる.

pid ファイルの場所を指定したい.

Daemon起動にいろいろとオプションをつけたい場合はハッシュでOptionsを与えればOK

options = {
    :dir_mode   => :script,
    :dir        => '/var/run',
    :multiple   => true,
    :ontop      => false,
    :mode       => :exec,
    :backtrace  => true,
    :monitor    => true
  }
Daemons.run_proc("my_daemon",options){
	loop{
		sleep 1
	}
}


オプションを与えることで、pid ファイルの場所を指定できる


ruby1.9 なら Process.daemon で出来ちゃうんだけど.