shell脚本中远程执行kill命令不生效问题-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

shell脚本中远程执行kill命令不生效问题

2016-06-15 15:42:49 5550 1

需求大致如下
1、a b c 3台服务器
2、在a上ssh到b上,b在ssh到c,查找到c上面特定的进程pid
3、在a上ssh到b上,b在ssh到c,kill掉上面步骤中找到的进程

需求1和2 已经实现,需求3 kill会有问题
执行kill命令的时候,是在b机器而不是c机器了
xargs和管道前面的,却都是在c执行的,进程号也能获取到了
大家看看有什么改进办法
screenshot

#远程ssh执行片段代码
                echo -e "\n\n\n\n"
                PID1=$(ssh -A -t -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no tomcat@192.168.10.56 ssh -A tomcat@$IP "ps -ef | grep -v grep
| grep tail  | grep "$PWD/$PROJECT/$FILE" | awk '{print \$2}'")
                echo -e ">>>>>>>>>>>>>>>>$PID1"
                ssh -A -t -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no tomcat@192.168.10.56 ssh -A tomcat@$IP "echo $PID1 | xargs kill -9"
                echo -e "status is >>>>>>>>>>$?"
 
 
#尝试kill进程代码片段,注释行都无法kill进程
#ssh -A -t -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no tomcat@192.168.10.56 ssh -A tomcat@$IP "ps -ef | grep -v grep | grep
 tail | grep "$PWD/$PROJECT/$FILE" | cut -d' ' -f 5 | xargs -i kill {}"
                #ssh -A -t -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no tomcat@192.168.10.56 ssh -A tomcat@$IP "ps -ef | grep -v grep | grep
 tail | grep "$PWD/$PROJECT/$FILE" | cut -d' ' -f 5 | xargs kill"
                #ssh -A -t -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no tomcat@192.168.10.56 ssh -A tomcat@$IP "kill -9 $(echo $PID1)"
                #ssh -A -t -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no tomcat@192.168.10.56 ssh -A tomcat@$IP "echo $PID1 | xargs kill -9"
                #ssh -A -t -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no tomcat@192.168.10.56 ssh -A tomcat@$IP "kill -9 $PID1"
                #ssh -A -t -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no tomcat@192.168.10.56 ssh -A tomcat@$IP kill -9 "$PID1"
                #ssh -A -t -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no tomcat@192.168.10.56 ssh tomcat@$IP "kill -9 ${PID1}"
                #ssh -A -t -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no tomcat@192.168.10.56 ssh tomcat@$IP ". /etc/profile && kill -9 ${PID
1}"
                #ssh -A -t -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no tomcat@192.168.10.56 ssh -A tomcat@$IP "kill -9 $(ps -ef | grep -v g
rep | grep tail | grep "$PWD/$PROJECT/$FILE" | awk '{print \$2}')"
                #ssh -A -t -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no tomcat@192.168.10.56 ssh -A tomcat@$IP "kill -9 `ps -ef | grep -v gr
ep | grep tail | grep "$PWD/$PROJECT/$FILE" | awk '{print \$2}'`"
                #ssh -A -t -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no tomcat@192.168.10.56 ssh -A tomcat@$IP "source /home/tomcat/.bash_pr
ofile && /bin/kill -9 "$PID1""
                #ssh -A -t -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no tomcat@192.168.10.56 ssh -A tomcat@$IP "source /home/tomcat/.bash_pr
ofile &&  ps -ef | grep -v grep | grep tail | grep "$PWD/$PROJECT/$FILE" | awk '{print \$2}' | xargs kill -9"
                #$(ssh -A -t -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no tomcat@192.168.10.56 ssh -A tomcat@$IP "ps -ef | grep -v grep | gr
ep tail  | grep "$PWD/$PROJECT/$FILE" | awk '{print \$2}' | xargs kill -9")
                #ssh -A -t -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no tomcat@192.168.10.56 ssh -A tomcat@$IP "ps -ef | grep -v grep | grep
 tail | grep "$PWD/$PROJECT/$FILE" | awk '{print \$2}' | xargs kill -9"
                #ssh -A -t -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no tomcat@192.168.10.56 ssh -A tomcat@$IP "ps -ef | grep -v grep | grep
 tail | grep "$PWD/$PROJECT/$FILE" | awk '{print \$2}' | xargs -i kill {}"
取消 提交回答
全部回答(1)
  • a123456678
    2019-07-17 19:39:28

    ssh -t 这个参数,跳转执行基于交互窗口的命令可以,不是基于交互的命令,不要用这个参数。个人这样理解的,有误差还望各位指点解惑。

    我就出在这个参数上面了,加上 -t 怎么都kill不掉,去掉 -t 瞬间世界清静了。

    另外直接kill掉C上面的进程,B和A上面相应启动的进程也会结束。

    附上shell

    #变量
    COMMAND1="ssh -A -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no tomcat@192.168.10.56"
     
    #最终实现需求代码片段             
    PID1=$(${COMMAND1} ssh -A tomcat@$IP "ps -ef | grep -v grep | grep tail  | grep "$PWD/$PROJECT/$FILE" | awk '{print \$2}'")
    ${COMMAND1} ssh -A tomcat@$IP "kill -9 $PID1"
    0 0
相关问答

1

回答

Linux shell怎么检查远程端口是否对bash开放呢?

2021-12-02 12:41:18 154浏览量 回答数 1

1

回答

ansible远程执行shell命令时,报错,可能是因为什么呀?

2021-11-15 21:32:26 297浏览量 回答数 1

1

回答

iis该服务已经配置不接受任何远程shell请求,怎么解决啊

2017-08-14 08:16:48 3794浏览量 回答数 1

3

回答

服务器无法处理请求。该服务器配置为不接受任何远程shell请求。

2017-05-02 13:55:43 6417浏览量 回答数 3

1

回答

如何通过Shell+Curl抓取远程页面中的链接并存入文本

2016-06-14 15:39:39 3188浏览量 回答数 1

1

回答

Linux shell上链接远程的mongodb问题

2016-01-31 18:33:27 2009浏览量 回答数 1

1

回答

Hive shell可以使用Hive命令运行的服务有什么呢?

2022-11-05 17:29:19 55浏览量 回答数 1

1

回答

HBase中怎样显示HBase Shell的一些基本使用信息以及几个示例命令?应该注意什么?

2022-11-04 18:27:39 54浏览量 回答数 1

1

回答

请教一个问题,有没有办法能直接在shell命令行带入arthas命令? 比如 java -jar

2022-10-12 09:59:04 225浏览量 回答数 1

1

回答

函数计算里可以执行shell命令吗?

2022-08-02 17:05:36 284浏览量 回答数 1
+关注
文章
问答
问答排行榜
最热
最新
相关电子书
更多
Shell 脚本速查手册
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载