【问题标题】:Unable to kill remote processes with ssh无法使用 ssh 杀死远程进程
【发布时间】:2016-12-27 08:39:15
【问题描述】:

我需要使用 shell 脚本杀死远程进程,如下所示:

#!/bin/bash

ip="172.24.63.41"
user="mag"
timeout 10s ssh -q $user@$ip exit
if [ $? -eq 124 ]
then
    echo "can not connect to $ip, timeout out."
else
    echo "connected, executing commands"
    scp a.txt $user@$ip://home/mag
    ssh -o ConnectTimeout=10 $user@$ip > /dev/null 2>&1 << remoteCmd

    touch b.txt
    jobPid=`jps -l | grep jobserver | awk '{print $1}'`
    if [ ! $jobPid == "" ]; then
        kill -9 $jobPid
    fi
    exit

remoteCmd

echo "commands executed."
fi

执行后发现scp和touch子句都执行了,但是kill子句没有执行成功,进程还在。如果我在远程机器上运行从“jobPid = ...”到“fi”的子句,则可以终止该进程。如何解决?

【问题讨论】:

    标签: shell ssh process kill


    【解决方案1】:

    我在远程机器上放了一个脚本,它可以找到并杀死进程,然后我在本地机器上运行脚本,在远程机器上使用 ssh 执行脚本。脚本如下:

    本地脚本:

    #!/bin/bash
    ip="172.24.63.41"
    user="mag"
    
    timeout 10s ssh -q $user@$ip exit
    if [ $? -eq 124 ]
    then
        echo "can not connect to $ip, timeout out."
    else
        echo "connected, executing commands"
        ssh -q $user@$ip "/home/mag/local.sh"
        echo "commands executed."
    fi
    

    远程脚本:

    #!/bin/bash
    jobPid=`jps -l | grep jobserver | awk '{print $1}'`
    if [ ! $jobPid == "" ]; then
        kill -9 $jobPid
    fi
    

    【讨论】:

      【解决方案2】:

      您的脚本需要 root 访问权限(这绝不是一个好主意)。或者确保您正在运行的程序正在您的网络用户/组下运行

      【讨论】:

      • 我已将用户修改为“root”并运行脚本。它仍然无法杀死进程。但是 scp 和 touch 子句仍然有效。你能给我任何其他的建议吗?顺便问一下,网络用户/组是什么意思?提前谢谢你。
      猜你喜欢
      • 2014-03-23
      • 1970-01-01
      • 1970-01-01
      • 2010-09-24
      • 1970-01-01
      • 2013-08-05
      • 2015-06-08
      • 2015-06-01
      • 2016-07-13
      相关资源
      最近更新 更多