6

Capistrano 2.x では、次のように :on_error => :continue を追加するだけです。

task :bad_script, :on_error => :continue do
    my_error = capture('/path/to/tomcat/shutdown.sh')
end

Capistrano 3.x または ssh-kit (基礎となる通信) でこれを行う方法がわかりません。

task :bad_script do
  server_is_down
    on roles :all do
      begin
        server_is_down = capture('/path/to/tomcat/shutdown.sh')
      rescue
        #do something if server_is_down has the correct text
      end
    end
  end
end

begin/rescue ブロックで新しい方法を囲んでみましたが、エラーが発生するのを止めるだけで、エラーからの出力は返されません。

私はまだこれを行う方法を知りたいのですが、私の1つのケースでそれを必要とする回避策を見つけました。それは、サーバーが失敗した場合にサーバーを停止させることです。

task :bad_script do
  server_is_down = false
    on roles :all do
      begin
        execute('/path/to/tomcat/shutdown.sh')
      rescue
        server_is_down = true
      end
    end
  end
end

これは、シャットダウンが発生したときにのみエラーになると想定しています。

4

2 に答える 2

1

エラーを抑制し、stderr を次のような変数にリダイレクトできます。

capture('output_from_tomcat_shutdown=`/path/to/tomcat/shutdown.sh 2>&1` || echo $output_from_tomcat_shutdown')
于 2015-09-22T11:56:12.543 に答える
0

からの出力captureは、そのメソッドが失敗しない場合にのみ返されます。例外が発生した場合、値を返す方法はありません (例外処理が制御されるため)。そのため、capture コマンドから何らかの応答を得るには、発生した例外の一部として必要な値を返すか、例外を発生させずにエラー コード (および取得したデータ) を返す必要があります。取得する必要があります)。

于 2014-01-14T22:02:44.950 に答える