在Capistrano 2.x中,您可以简单地添加:on_error => :继续如下:
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
这是假设它仅在关机发生时出错。
您可以抑制错误并将 stderr 重定向到如下所示的变量:
capture('output_from_tomcat_shutdown=`/path/to/tomcat/shutdown.sh 2>&1` || echo $output_from_tomcat_shutdown')
仅当该方法未失败时,才会返回 capture
的输出。如果它引发异常,则无法返回值(因为异常处理将控制)。因此,为了从捕获命令获得一些响应,您需要它返回所需的值作为引发的异常的一部分,或者不引发异常,而只返回错误代码(以及您需要获取的数据)。