如何在tmux窗口中启动脚本后自动终止ssh连接?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在tmux窗口中启动脚本后自动终止ssh连接?相关的知识,希望对你有一定的参考价值。

我正在尝试使用ssh在另一台计算机上的tmux环境中运行脚本,但ssh连接在脚本完成之前不会终止。让我详细解释一下:

这是test_ssh.sh:

#!/bin/bash

name="computername"
ssh $name /bin/bash <<EOF
    cd /scratch
    mkdir test
    cd test
    cp /home/user/test_tmux3.sh .
    tmux -c ./test_tmux3.sh &
    echo 1   # at this point it waits until test_tmux3.sh is finished, instead of exiting :(
EOF

这是test_tmux3.sh(作为测试,看看是否有任何事情发生):

#!/bin/bash

mkdir 0min
sleep 60
mkdir 1min
sleep 60
mkdir 2min

最后,我想循环遍历多台计算机($ name)以在每台计算机上启动脚本。我现在遇到的问题是test_ssh.sh在echo 1之后等待,并且仅在tmux -c test_tmux3.sh&之后退出(2分钟后)。如果我手动输入control-C test_ssh.sh stop和tmux -c test_tmux3.sh并继续在计算机上运行$ name(这就是我想要的)。如何自动完成最后一步并让ssh自行退出?

答案

在分离的tmux会话中启动命令。

#!/bin/bash

name="computername"
ssh $name /bin/bash <<EOF
    mkdir /scratch/test
    cd /scratch/test
    cp /home/user/test_tmux3.sh .
    tmux new-session -d ./test_tmux3.sh
    echo 1
EOF

现在,tmux命令将在创建新会话并在该会话中启动脚本后立即退出。

另一答案

您是否尝试使用nohup命令告诉进程在退出后继续运行?:

#!/bin/bash

name="computername"
ssh $name /bin/bash <<EOF
    cd /scratch
    mkdir test
    cd test
    cp /home/user/test_tmux3.sh .
    nohup tmux -c ./test_tmux3.sh &
    echo 1   # at this point it waits until test_tmux3.sh is finished, instead of exiting :(
EOF

以上是关于如何在tmux窗口中启动脚本后自动终止ssh连接?的主要内容,如果未能解决你的问题,请参考以下文章

Tmux 学习摘要3--使用脚本定制 tmux 环境

tmux使用及个性化配置

tmux懒人启动和关闭脚本

如何从 bash 脚本中 ssh?

终端复用工具-tmux

如何在 konsole/yakuake 启动时自动启动 tmux?