アプリ版:「スタンプのみでお礼する」機能のリリースについて

どなたかご存知の方。教えてください。
rubyの中で別のrubyのプログラムを起動したいのですが、
どのように記述したら良いでしょうか?
この際の親プログラムは子プログラムを起動する事だけが目的なので、
子プログラムの実行結果の取得はせずに、子プログラム起動後即終了するようにしたいです。

初心者なものでどのようにしたら良いかわからず、困っています。
よろしくお願いします。

A 回答 (5件)

#4です。


fork & execが定番のやり方になります。
以下のようなスクリプトを作ってください。
ファイル名:test_fork.rb
--------------------------------
def start_proc(ruby_script)
pid = fork do
exec("/usr/bin/ruby" + " " + ruby_script)
end
end
print "main start\n"
start_proc("test1.rb")
start_proc("test2.rb")
print "main end\n"
-----------------------------------
start_procはruby_scriptを引数として、そのスクリプトをバックグラウンドで起動します。
(そのスクリプトの終了を待ちません)
テスト用に以下の2つのスクリプトを起動しますので、以下のスクリプトも作成してください。

ファイル名:test1.rb
------------------------------
print "test1.rb start\n"
sleep(10)
print "test1.rb end\n"
-------------------------------

ファイル名:test2.rb
-----------------------------
print "test2.rb start\n"
sleep(5)
print "test2.rb end\n"
-------------------------------

ruby test_fork.rb を実行します。
実行結果は以下のようになります。
-------------------------------------
main start
main end
test1.rb start
test2.rb start
test2.rb end
test1.rb end
-------------------------
test_fork.rbはテスト用スクリプトを起動後、直ちに停止しています。
尚、今回、start_proc("test1.rb")はフルパスでパス名を指定していません。(手抜きです。)
実際に運用される場合は、start_proc("/aaa/bbb/test1.rb")のようにフルパスで指定してください。

当方の環境は以下の通りです。
centos 6.5
ruby 1.9.3p551
    • good
    • 1
この回答へのお礼

ありがとうございました。
サンプルスクリプトまで教えて頂き、非常に助かりました。
おかげさまで実装&正常稼働確認をする事ができました。

本当にありがとうございました。

お礼日時:2016/03/23 16:11

具体的な回答を希望されるなら、OSの名称(windows、linux等)、rubyのバージョン


を提示されたほうが、良いでしょう。そのほうが、より良い回答が得られる可能性があります。
    • good
    • 0
この回答へのお礼

ご指摘ありがとうございます。
おっしゃる通りだと思います。

OSはRHEL7
rubyのバージョンは、「ruby 2.0.0p598」です。

やりたい事としては、
Linux上で稼働しているデーモンがあるトリガーによりrubyのプログラムを起動しているのですが、
そのrubyのプログラムの処理に時間のかかる部分があり、
大量に起動トリガーが発生した場合に、デーモンでさばききれない事象が発生しました。

それを回避するために、処理を分割し、どんどん子プロセスを生成し、親プロセスは終了し、
デーモン側でプログラム起動が滞らないようにしようと考えています。

よろしくお願い致します。

お礼日時:2016/03/19 09:40

Unix的には fork&exec.

    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
御礼おそくなりました。
fork&execを恥ずかしながら知りませんでした。
参考になりました。

お礼日時:2016/03/23 16:10

http://docs.ruby-lang.org/ja/search/version:1.8. …

補足、フォークすることも出来るみたいですよ。
    • good
    • 0
この回答へのお礼

ありがとうございます。こういうやり方があるんですね。
勉強になります。

お礼日時:2016/03/19 09:31

system("path/script.rb")


または、system("ruby path/script.rb")
でどうですか。

http://docs.ruby-lang.org/ja/2.3.0/class/Kernel. …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
実装して試してみようと思います。

お礼日時:2016/03/19 09:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!