如何同时运行多个ruby脚本

时间:2015-12-02 22:33:05

标签: ruby macos shell command

我正在尝试在我的Mac上同时运行多个ruby脚本,我没有运气。我可以看到ruby进程启动,但随后它们立即停止。该脚本作为单个进程正常工作,没有错误。以下是我尝试过的一些例子。

10.times do

  system "nohup ruby program.rb \"arg1 arg2\" &"

end

10.times do

  `nohup ruby program.rb \"arg1 arg2\" &`

end


10.times do

  system "ruby program.rb \"arg1 arg2\""

end

3 个答案:

答案 0 :(得分:2)

你是否需要从ruby开始出于任何特定原因?你为什么不直接从bash开始10次?像:

  

$ for for seq 1 10;做nohup ruby​​ foo.rb \&amp ;;完成

让我知道..

答案 1 :(得分:1)

您可以使用模块forkexecwaitProcess构建解决方案。

# start child processes
10.times { fork { exec(cmd) } }
# wait for child processes
10.times { |pid| Process.wait }

或者更长时间玩(在Ubuntu上使用Ruby 1.8.7测试过)。添加rescue nil以在等待时抑制错误。

10.times do |i|
  fork do
    ruby_cmd = "sleep(#{10-i});puts #{i}"
    exec("ruby -e \"#{ruby_cmd}\"")
  end
end

10.times { Process.wait rescue nil }
puts "Finished!"

答案 2 :(得分:1)

nohup将其输出重定向到文件$ HOME / nohup.out,除非明确重定向。您应该将每次调用的输出重定向到另一个文件。

另外,为了安全起见,我会将stdin重定向到/ dev / null - 以防被调用程序从stdin读取。

10.times do |i|

   system "nohup ruby program.rb 'arg1 arg2' </dev/null >#{ENV['HOME']}/nohup#{i}.out &"

end

BTW(和主题):您确定要将arg1 arg2作为SINGLE参数传递给program.rb吗?