每当服务已处于“停止”状态时,“service my_service stop” 即被视为错误。如何在出现错误的情况下继续前进?

每当服务已处于“停止”状态时,“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和以及start介于两者之间的命令,当然,不管命令之前应用程序的状态如何service stop,并且不会失败,或者在“服务停止”后尽管可能出现故障仍继续运行

怎么做?

答案1

您的脚本指定了set -e,如果脚本中的任何命令返回错误,则会导致 shell 退出。如果您省略此项,则默认情况下,如果有任何命令返回错误,脚本将继续。


如果您希望保留set -e并仅在特定命令返回错误时继续,则可以使用控制运算符 让脚本忽略命令中的错误||,该控制运算符告诉 shell 在第一个命令失败时执行另一个命令。然后通过指定内置命令:,它不执行任何操作,只是成功返回(类似于true您也可以使用的命令)。

例如:

service my_service stop || :

如果service命令失败,则 shell 将执行:并返回成功,并且脚本将继续执行。

相关内容