开发者社区> 问答> 正文

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

需求大致如下
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 {}"

展开
收起
a123456678 2016-06-15 15:42:49 6413 0
1 条回答
写回答
取消 提交回答
  • 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"
    2019-07-17 19:39:28
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Shell 脚本速查手册 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载