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