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

我已经尝试在开始/救援块中使用新方法,但这只会阻止它出错,但不会返回错误的输出。

我仍然想知道如何做到这一点,但我想出了一种方法来解决我的一个案例需要它,那就是如果它失败,只需设置服务器关闭。

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仅当该方法没有失败时,才会返回来自的输出。如果它引发异常,它就无法返回值(因为异常处理将控制)。因此,为了从捕获命令获得一些响应,您需要它返回您需要的值作为引发异常的一部分,或者不引发异常,而只返回一个错误代码(加上您需要获得)。

于 2014-01-14T22:02:44.950 回答