当本地 bash 脚本被终止时,如何终止通过 SSH 运行的脚本

当本地 bash 脚本被终止时,如何终止通过 SSH 运行的脚本

我有以下脚本,exec.sh它在 node01 上远程运行 python 脚本:

#!/bin/bash
ssh node01 "python2.7 /home/user/run.py"

如果我exec.sh使用 或CTRL+C终止kill -9,那么我通过 ssh 运行的 python 脚本仍在 node01 上执行。

我想要的是每当我终止脚本时终止我在 node01 上运行的进程exec.sh

答案1

这是因为 exec.sh 是本地的,它在远程计算机上执行命令。因此,如果您终止本地进程,远程进程仍然运行。

为了实现你想要的,你需要 exec.sh 捕获 CTRL+C 的信号,并在杀死自己之前杀死远程主机上的命令。

function trap_ctrlc ()
{
# kill the remote process
  ssh user@pass "pkill -9 python"

  exit 2 
}

# initialise trap to call trap_ctrlc function
# when signal 2 (SIGINT) is received
trap "trap_ctrlc" 2

your script here

注意:python 是非常通用的进程杀掉。启动的时候最好保存进程ID,然后专门通过ID杀掉它

相关内容