Ssh
只要服務已經處於“停止”狀態,“service my_service stop”就會被視為錯誤。儘管出現錯誤,如何繼續前進?
我有一堆通過 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
。但是我希望它始終同時執行
stop
andstart
和介於兩者之間的命令,當然,無論命令之前的應用程序狀態如何service stop
,並且不會失敗,或者儘管在“服務停止”之後可能出現故障,但仍繼續執行怎麼做?
您的腳本指定
set -e
,如果腳本中的任何命令返回錯誤,這將導致 shell 退出。如果您忽略它,則預設情況下,如果任何命令返回錯誤,腳本將繼續執行。如果您希望保留
set -e
並僅在特定命令返回錯誤時繼續,您可以使用控制運算符使腳本忽略命令中的錯誤,||
如果第一個命令失敗,它會告訴 shell 執行另一個命令。然後通過指定內置命令:
,它什麼都不做,只是成功返回(類似於true
命令,您也可以使用)。例如:
service my_service stop || :
如果
service
命令失敗,則 shell 將執行:
而返回成功,腳本將繼續。