0

Amazon EC2 インスタンスに接続し、その後 (Ruby で) コマンドを実行する単純な sh スクリプト (file.command) がありますtwurl....

#!/bin/sh

#Connect to Amazon EC2
ssh -i ~/.ssh/research.pem ec2-user@ec2-xx-xx-xx-xxx.compute-1.amazonaws.com twurl -t -d track=keyword  -H stream.twitter.com /1.1/statuses/filter.json

このコマンドは、タイムアウト エラーをスローすることがあります。コマンドがキャンセルされないように、このエラーを解決するにはどうすればよいですか?

エラー:

/usr/lib/ruby/1.8/timeout.rb:64:in `rbuf_fill': execution expired (Timeout::Error)
from /usr/lib/ruby/1.8/net/protocol.rb:134:in `rbuf_fill'
from /usr/lib/ruby/1.8/net/protocol.rb:104:in `read_all'
from /usr/lib/ruby/1.8/net/http.rb:2228:in `read_body_0'
from /usr/lib/ruby/1.8/net/http.rb:2181:in `read_body'
from /usr/lib/ruby/gems/1.8/gems/twurl-0.8.3/bin/../lib/twurl/request_controller.rb:14:in `perform_request'
from /usr/lib/ruby/1.8/net/http.rb:1054:in `request'
from /usr/lib/ruby/1.8/net/http.rb:2144:in `reading_body'
from /usr/lib/ruby/1.8/net/http.rb:1053:in `request'
from /usr/lib/ruby/1.8/net/http.rb:1037:in `request'
from /usr/lib/ruby/1.8/net/http.rb:543:in `start'
from /usr/lib/ruby/1.8/net/http.rb:1035:in `request'
from /usr/lib/ruby/gems/1.8/gems/twurl-0.8.3/bin/../lib/twurl/oauth_client.rb:80:in `perform_request_from_options'
from /usr/lib/ruby/gems/1.8/gems/twurl-0.8.3/bin/../lib/twurl/request_controller.rb:13:in `perform_request'
from /usr/lib/ruby/gems/1.8/gems/twurl-0.8.3/bin/../lib/twurl/request_controller.rb:9:in `dispatch'
from /usr/lib/ruby/gems/1.8/gems/twurl-0.8.3/bin/../lib/twurl/abstract_command_controller.rb:7:in `dispatch'
from /usr/lib/ruby/gems/1.8/gems/twurl-0.8.3/bin/../lib/twurl/cli.rb:38:in `dispatch'
from /usr/lib/ruby/gems/1.8/gems/twurl-0.8.3/bin/../lib/twurl/cli.rb:21:in `run'
from /usr/lib/ruby/gems/1.8/gems/twurl-0.8.3/bin/twurl:4
from /usr/bin/twurl:19:in `load'
from /usr/bin/twurl:19
    logout 

助けてくれてどうもありがとう!

2013 年 8 月 26 日編集:

エラーをキャッチするルビースクリプトを作成しましたが、スクリプトではメソッド「twurl」が認識されないようですが、「twurl ...」をインスタンスで直接(スクリプト経由ではなく)実行すると、すべてが機能します..

execute_twurl.rb

begin
   twurl -t -d track=keyword -H stream.twitter.com /1.1/statuses/filter.json)
rescue Exception=>e
    e.inspect
end

filename.sh で呼び出される

   #!/bin/sh

    #Connect to Amazon EC2
    ssh -i ~/.ssh/research.pem ec2-user@ec2-xx-xx-xx-xxx.compute-1.amazonaws.com ruby execute_twurl.rb

エラーを与える:

execute_twurl.rb:2: syntax error, unexpected tUMINUS, expecting kDO or '{' or '('
   twurl -t -d track=keyword -H stre...
             ^
execute_twurl.rb:2: syntax error, unexpected tIDENTIFIER, expecting kDO or '{' or '('
...track=keyword -H stream.twitter.com /1.1/statuses/fil...
                              ^
execute_twurl.rb:2: unknown regexp options - tat
execute_twurl.rb:2: syntax error, unexpected ')', expecting kEND
4

1 に答える 1

2

Ruby 内でシステム コマンドを実行するには、次のようにします。

system 'twurl -t -d track=keyword -H stream.twitter.com /1.1/statuses/filter.json'

これにより、グローバル変数 $? プロセスが成功しなかった場合、プロセスの終了ステータスは 0 になります。したがって、Ruby スクリプトは次のようになります。

system 'twurl -t -d track=keyword -H stream.twitter.com /1.1/statuses/filter.json'
if $? == 0
   #retry, throw exeption, etc. 
end

バッククォートを使用してコマンドを実行し、出力ステータスを取得することもできます。以下は、タイムアウトエラーに対して機能する可能性があります。

output=`twurl -t -d track=keyword -H stream.twitter.com /1.1/statuses/filter.json` ;
result=$?.success?
于 2013-08-27T06:35:36.977 に答える