我有以下脚本,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杀掉它