从Rails,我打电话给wget
:
system("wget", ...)
我想为这个调用设置一个超时,这样如果它需要太长时间(这可能意味着下载了太多文件,或者下载了大文件),我想停止它并向用户返回一个错误,以便我的服务器不会超载。我怎么能这样做?
答案 0 :(得分:2)
你是否特别需要在子shell中运行这样的调用?如果没有,请使用超时和反引号:
require 'timeout'
Timeout.timeout(3) do
puts `tree /` # raises an exception, which you can rescue and handle
end
如果你确实需要在外部运行它,我会选择Subexec
之类的东西答案 1 :(得分:1)
通常,尝试在SystemTimer中包装调用。 https://rubygems.org/gems/SystemTimer
在您的特定情况下,请尝试system("wget -T #{timeout_in_seconds}")