2014-01-14 62 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')