为什么我的本地命令在同一脚本中的远程ssh命令之后无法运行?

时间:2013-04-23 18:07:03

标签: bash ssh

我做完了我的作业,但我想我可能会在这里混合苹果和橘子。我的脚本旨在运行远程内联系列命令,退出,然后运行一些其他LOCAL命令。它必须首先远程完成,因为这些服务是用于故障转移代理。问题是远程ssh行断开连接后,整个脚本就会停止。我不确定为什么断开连接会停止整个脚本。也许退出线应该受到责备?

    #!/bin/bash
    #
    ### Run remote svc restarts and then Local restarts
    #
    exec ssh -t REMOTEHOST 'stop svc1; restart svc2; start svc3; exit'
    (SCRIPT FAILS HERE)  
    ## Run local shell (This works independently, but not in the entire script)
    rst=`pgrep -n failoversvc`

    echo "Stopping 1st service at `date | awk '{print $2,$3,$4}'`" && service 1 stop >> SYNCLOG.txt
          sleep 2
    echo "Restarting 2nd service at `date | awk '{print $2,$3,$4}'`" && service 2 restart >> SYNCLOG.txt

    if rst="";then

    echo "Starting 3rd service at `date | awk '{print $2,$3,$4}'`" && service 3 start >> SYNCLOG.txt
      else 
        echo "3rd Service PID not found! Check for functionality"
    fi

我看了看THIS我无法得到我想要的结果。

1 个答案:

答案 0 :(得分:3)

exec是一个非常残酷的命令:它完全使用您指定的命令替换当前进程(在本例中,运行脚本的shell)。除非exec失败,否则脚本中该行之后的任何内容都不会运行。这是设计的,这就是exec的用途。

如果您希望脚本在ssh之后继续,只需删除exec