5

在 Rails 中,我进行了系统调用wget

system("wget", ...)

我想为这个调用设置一个超时时间,这样如果它花费的时间太长(这可能意味着下载了太多文件,或者下载了一个大文件),我想停止它并向用户返回一个错误,这样我的服务器没有超载。我怎样才能做到这一点?

4

2 回答 2

3

您是否特别需要在这样的子shell中运行调用?如果没有,请使用超时和反引号:

require 'timeout'

Timeout.timeout(3) do
  puts `tree /`  # raises an exception, which you can rescue and handle
end

但是,如果您确实需要在外部运行它,我会使用Subexec 之类的东西

于 2013-05-09T07:08:55.470 回答
1

通常,尝试将调用包装在 SystemTimer 中。 https://rubygems.org/gems/SystemTimer

在您的特定情况下,请尝试system("wget -T #{timeout_in_seconds}")

于 2013-05-09T06:50:43.783 回答