2014-01-14 32 views
5

在Capistrano的2.X,你可以简单地添加继续当脚本失败(错误),并捕获输出在Capistrano 3.x或ssh-kit(底层通信)中这样做。任何帮助,将不胜感激。如何使用Capistrano的3

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 

这是假设它只在发生关机时出错。

回答

0

仅当该方法没有失败时才会返回capture的输出。如果它引发异常,它将无法返回值(因为异常处理将控制)。因此,为了从capture命令获得一些响应,您需要它将返回需要的值作为引发异常的一部分,或者不要引发异常,并返回错误代码(加上数据需要获得)。

+0

从我在https://github.com/capistrano/sshkit/blob/7f779a9a24fcc7fae179a20a652429e4bac454fa/lib/sshkit/backends看/netssh.rb,它不应该产生任何异常 –

+0

从https://github.com/capistrano/sshkit/blob/52797aeecc07190ca47ec5c3315243cd95b568fd/EXAMPLES.md “执行,如果出现问题引发错误的主机 做|主机| 执行!(:echo,'“示例消息!”1>&2; false') end 这会引发SSHKit :: Command:使用#message“Example Message!”失败,这将导致命令中止。“ –

+0

我无法控制引发的异常,所以如何返回异常中的某个值?我了解捕捉如何工作,我希望它在失败时能够返回。脚本无法正常工作的原因很多,我想寻找某个脚本,并在出现“错误”时执行某些操作。 –

1

您可以取消错误并重定向错误输出到像这样的变量:

capture('output_from_tomcat_shutdown=`/path/to/tomcat/shutdown.sh 2>&1` || echo $output_from_tomcat_shutdown')