Ssh

只要服務已經處於“停止”狀態,“service my_service stop”就會被視為錯誤。儘管出現錯誤,如何繼續前進?

  • September 30, 2020

我有一堆通過 ssh 執行的 bash 命令:

#!/bin/bash

CMD="
 set -e

 cmd1
 cmd2
 # ........


 service my_service stop

 # .........
 # some commands here......
 # .........

 service my_service start

" 

ssh -t -A -q -C $SERVER@$HOST "$CMD"

有時,只要my_service碰巧已經處於停止狀態,該命令service my_service stop就會返回:

--rpc-eval : RPC failed with reason :nodedown       # it's an Erlang app, hence a response
./my_script.sh: línea 26: error: orden no encontrada

由於上述命令被視為失敗,由於某種原因,它將終止執行,退出會話,因此不會到達命令service my_service start

但是我希望它始終同時執行stopandstart和介於兩者之間的命令,當然,無論命令之前的應用程序狀態如何service stop,並且不會失敗,或者儘管在“服務停止”之後可能出現故障,但仍繼續執行

怎麼做?

您的腳本指定set -e,如果腳本中的任何命令返回錯誤,這將導致 shell 退出。如果您忽略它,則預設情況下,如果任何命令返回錯誤,腳本將繼續執行。


如果您希望保留set -e並僅在特定命令返回錯誤時繼續,您可以使用控制運算符使腳本忽略命令中的錯誤,||如果第一個命令失敗,它會告訴 shell 執行另一個命令。然後通過指定內置命令:,它什麼都不做,只是成功返回(類似於true命令,您也可以使用)。

例如:

service my_service stop || :

如果service命令失敗,則 shell 將執行:而返回成功,腳本將繼續。

引用自:https://serverfault.com/questions/1035881