[#39699] デーモン・プロセスの作り方 — "Mitsuyasu Ichimura" <mitsuyasu@...>
こんにちは、市村と申します。
27 messages
2004/06/01
[#39702] Re: デーモン・プロセスの作り方
— Hidetoshi NAGAI <nagai@...>
2004/06/01
永井@知能.九工大です.
[#39710] Re: デーモン・プロセスの作り方
— Masayoshi Takahashi <maki@...>
2004/06/01
高橋征義です。宣伝モードです(_o_)
[#39711] Re: デーモン・プロセスの作り方
— nobu.nakada@...
2004/06/01
なかだです。
[#39721] Re: デーモン・プロセスの作り方
— Masayoshi Takahashi <maki@...>
2004/06/02
高橋征義です。
[#39725] Re: デーモン・プロセスの作り方
— OHARA Shigeki <os@...>
2004/06/03
大原です。
[#39732] Re: デーモン・プロセスの作り方
— Masayoshi Takahashi <maki@...>
2004/06/03
高橋征義です。
[#39705] 最後だけが — Fujisaki <fujisaki@...>
始めまして フジサキと申します
6 messages
2004/06/01
[#39757] MacのIEだとcgi.rbのmultipartがおかしいときがある — "fuji@..." <fuji@...>
藤岡と言います。
9 messages
2004/06/15
[#39758] Re: MacのIEだとcgi.rbのmultipartがおかしいときがある
— Wataru Gotoh <gotow@...>
2004/06/15
後藤@北の方といいます。
[#39768] cygwin版 ruby1.8でPStore使用時のエラー — ikezawa@... (ikezawa)
池澤と申します。
5 messages
2004/06/19
[#39775] Hiki の脆弱性に関する注意喚起 — Kazuhiko <kazuhiko@...>
かずひこです。
7 messages
2004/06/20
[#39777] Re: Hiki の脆弱性に関する注意喚起
— SASADA Koichi <ko1@...>
2004/06/21
Kazuhiko <kazuhiko@fdiary.net> wrote :
[ruby-list:39710] Re: デーモン・プロセスの作り方
From:
Masayoshi Takahashi <maki@...>
Date:
2004-06-01 18:50:04 UTC
List:
ruby-list #39710
高橋征義です。宣伝モードです(_o_)
"Mitsuyasu Ichimura" <mitsuyasu@beatum.jp>さん wrote:
> デーモン・プロセスをRubyで作る場合、やり方はネットで
> 調べることができるのですが、本質的な理解ができていま
> せん。Cでのデーモン・プロセスの作り方に関しては書籍を
> 持っています。
>
> この件に関して良いRubyの参考書があれば、ご教示頂きた
> いと思います。不躾ですが、宜しくお願いいたします。
つい先日発売されました、まつもとゆきひろ監修・
青木峰郎+後藤裕蔵+高橋征義著の『Rubyレシピブック 268の技』
(ソフトバンクパブリッシング、ISBN4-7973-2429-5)のp.351に、
そのものずばりの「デーモンになる」というレシピがあります。
↓こんな感じです。
def daemon
return yield if $DEBUG
Process.fork{
Process.setsid
Dir.chdir "/"
trap("SIGINT"){ exit! 0 }
trap("SIGTERM"){ exit! 0 }
# 設定ファイルを読み直すなどのハンドラを設定してもよい
trap("SIGHUP"){ exit! 0 }
File.open("/dev/null"){|f|
STDIN.reopen f
STDOUT.reopen f
STDERR.reopen f
}
yield
}
exit! 0
end
# 使用例: Rubyスレッドを使ったTCPデーモン
daemon{
server = TCPServer.new(port)
while true
Thread.fork(server.accept){|sock|
begin
# ソケットのハンドリング
ensure
sock.close unless sock.closed?
end
}
end
}
『Rubyアプリケーションプログラミング』(とーぜんこの本も
持ってます:-))の例に比べると、比較的シンプルで、再利用は
しやそうだけど、特権ユーザとかのことは特に考えていなく
(Dir.chrootはしないですし)、プロセスIDを記述したロック
ファイルは生成してくれたりはしない、というのが違いでしょうか
(ちなみに権限の切り替え等についてはレシピ本ではp.334の
「ユーザID・グループIDを切り替える」で説明しています)。
exitではなくexit!を使うこととか、$DEBUGの役割などは
レシピ本の本文で説明されておりますので、よろしければ
お読みくださいませ。
高橋征義 (TAKAHASHI Masayoshi) E-mail: maki@rubycolor.org