Ruby on Rails 2.x

一言メッセージ :Ruby on Railsの2.xについてのメモ書きです

  • お気に入りブログに登録

RubyGem

[ リスト ]

daemonsで遊ぶ

環境はCentOS(Linux)
・ruby
・gem
・daemons
で実験

daemonとはターミナルを切ってもバックグラウンドで処理をし続けることです.
&」をつけてプログラムを起動させることはデーモンとは違います.


でまぁ,デーモン自体難しいかと思ってたんですが,
Rubyプログラムを間単にデーモン起動することが出来るgemがありました.
それが
daemons
です.

インストール方法

gem install daemons


使い方

test.rbをデーモン起動する

test.rb
loop do
p 'hello'
sleep(5)
end
helooと表示して5秒間休憩することを繰り返すプログラム
試しに,これを実行すると
# ruby test.rb
"hello"
"hello"
"hello"
(省略)
と表示されます.終了方法はCtr+C

次にデーモンとしてコントロールするプログラム
test_cont.rb(名前はなんでもいい)
require 'rubygems'
require 'daemons'
Daemons.run('test.rb')
でデーモン起動できます.

起動方法

ruby test_cont.rb start

これで起動できました!!
まったく意味のない5秒置きに負荷が少しかかるプロセスの完成です.

確認方法

ps axu

COMMANDの欄にtest.rbがあればバックグラウンドで起動できてます.
PIDとかの説明は
[http://www.ie.u-ryukyu.ac.jp/viewvc/y04/j04057/OS_2006/Process/kadai3.txt?revision=1.1 ]を参照

終了方法

ruby test_cont.rb stop

「ps axu」でtest.rbがなくなってることを確認してください



今回test.rbがhelloと表示するだけのプログラムだったので,デーモンの意味はありませんでしたが,
1時間置きにデータを更新するとか,1つの端末で複数のプログラムを同時に走らせるとか…

あんまりいい例が思いつかないけど,便利なはず!

その他

・「ruby test_cont.rb stop」でとまらない場合(PID=10000のとき)

kill -SIGKILL 10000

でとめる.他のプロセスを止めないように気をつける.
・rootユーザで起動した場合は,同じ権限を持ってないと止められない
・windowでうまくいくかはわからない(VMware + CentOSとかで実験?)
・必ずsleepかなにかで休憩させる(必ずかはわからんけど)
・レンタルサーバの場合はデーモン可かどうか調べる
・できるだけ自分の環境で試す

その他2

C言語の実行ファイルをこの方法でデーモン起動できるか実験(失敗してます
→出来ました.やり方は追記に書いておきます

追加で必要なもの
gcc ←Cプログラムをコンパイルする

大まかな流れ
test2_cont.rb
test2.rb
test2.c
test2
の4つのファイルを作る
test2.cからtest2という実行ファイルを作る
test2.rbからtest2を呼び出す
test2_cont.rbでtest2.rbをデーモン起動する

test2.c
#include <stdio.h>
main(){
while(1){
printf("hello\n");
sleep(5);
}
}
これも,5秒おきにhelloと表示するプログラムです
sleep関数はLinuxだけかな?

コンパイル方法

gcc test2.c -o test2

これでtest2というファイルが作られます

実行方法

./test2

helloと永遠に出てたら成功.Ctr+Cで止める

test2.rb
exec("./test2")
test2を実行する方法は2種類です
・system('./test2')
・exec("./test2" )
今回はexecをつかいました.

test2_cont.rb
require 'rubygems'
require 'daemons'
Daemons.run('test2.rb')

ruby test2_cont.rb start

で実行


ps axuで確認しましたがプロセスは作られてませんでした.


どうやればいいのかな(〜.〜)




追記

2008/9/2
C言語の実行ファイルをこの方法でデーモン起動できるか実験2
→結果的にあんまりメリットはないです.

方法
1.Cプログラムを書く
2.コンパイルして実行ファイルを作る
3.pathの通っているところに実行ファイルを置く
4.Cを呼び出すrubyファイルを作る
5.デーモン用のrubyファイルを作る

test3.c
#include <stdio.h>
main(){
while(1){
printf("hello\n");
sleep(5);
}
}

test3.rb
exec("test3")

test3_cont.rb
require 'rubygems'
require 'daemons'
Daemons.run('test3.rb')

3.pathの通っているところに実行ファイルを置く
まずパスの通っているところを調べる.

echo $PATH

で調べる
usr/binにあった場合
usr/binにtest3.cをコンパイルしたtest3を置く
パス(PATH)の確認と設定方法は? Pocketstudio.jp Linux Wikiでパスについて参考

あとは
ruby test3_cont.rb start
で実行

ps axu
でプロセスを確認すると
test3.rb
test3
の2つ作られる

ruby test3_cont.rb stop
で停止するとtest3.rbしか止まらないので,PIDを調べて(pid=111111111のとき)
kill -SIGKILL 111111111
で止める

わかったこと
system()は使えるので,
同じ要領でsqliteで編集したり,システムコマンドのmkdirでファイルを作ったりできること

閉じる コメント(0)

コメント投稿
名前パスワードブログ
投稿

閉じる トラックバック(0)

トラックバックされた記事

トラックバックされている記事がありません。

トラックバック先の記事

  • トラックバック先の記事がありません。

.

kashi
人気度

ヘルプ

  今日 全体
訪問者 19 1366
ファン 0 0
コメント 0 2
トラックバック 0 0
  • My Yahoo!に追加
  • RSS
  • RSSとは?

ケータイで見る

モバイル版Yahoo!ブログにアクセス!

モバイル版Yahoo!ブログにアクセス!

URLをケータイに送信
(Yahoo! JAPAN IDでのログインが必要です)

1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

標準グループ

登録されていません

検索 検索

開設日: 2008/8/11(月)


プライバシーの考え方 -  利用規約 -  ガイドライン -  ご質問・お問い合わせ

Copyright (C) 2008 Yahoo Japan Corporation. All Rights Reserved.