從Rails的系統調用設置超時,我做一個系統調用來wget
:在Rails的
system("wget", ...)
我想設置一個超時這個調用,因此,如果時間太長(這很可能是意味着下載的文件太多,或者下載的文件很大),我想停止它並向用戶返回一個錯誤,以便我的服務器不會超載。我怎樣才能做到這一點?
從Rails的系統調用設置超時,我做一個系統調用來wget
:在Rails的
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}")