需求大致如下
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执行的,进程号也能获取到了
大家看看有什么改进办法
#远程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 {}"
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"
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。