我正在尝试在我的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
答案 0 :(得分:2)
你是否需要从ruby开始出于任何特定原因?你为什么不直接从bash开始10次?像:
$ for for
seq 1 10
;做nohup ruby foo.rb \&amp ;;完成
让我知道..
答案 1 :(得分:1)
您可以使用模块fork
的exec
,wait
和Process
构建解决方案。
# 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吗?