weixin_58949904 2023-09-13 17:53 采纳率: 66.7%
浏览 8

shell脚本关闭集群ES异常,只能kill一个节点的进程

写了一个shell脚本,关闭集群内ES的,已经互相做了免密登录


#! /bin/bash
case $1 in
"stop"){
for i in node0 node1 node2
do
        echo "-----------关闭 $i elasticsearch 开始---------------"
        ssh $i "kill -9 $(lsof -i:9200|awk '{if(NR==2) printf $2}')"
        echo "-----------关闭 $i elasticsearch 结束---------------"
done
};;
esac

集群内三个节点 node0、node1、node2,启动脚本只能 kill node0 节点的进程,其它两个节点没反应,启动脚本结果如下:

img

如上图在 node0 上 lsof -i:9200 可以看到进程已经没了,但其它节点的进程依然还在,如下图:

img

  • 写回答

1条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-09-13 22:11
    关注

    引用 皆我百晓生 小程序回复内容作答:

    根据您提供的脚本和结果,可能的原因是在循环中使用了 ssh 命令,并且使用了变量 $i 来代表节点名称。在使用 ssh 命令时,需要将要执行的命令用引号引起来,以确保整个命令字符串被远程执行。您可以尝试以下修改脚本:

    #! /bin/bash
    case $1 in
    "stop")
    for i in node0 node1 node2
    do
        echo "-----------关闭 $i elasticsearch 开始---------------"
        ssh $i "lsof -i:9200 | awk '{if(NR==2) print \$2}' | xargs kill -9"
        echo "-----------关闭 $i elasticsearch 结束---------------"
    done
    ;;
    esac
    

    在上述修改中,我将 lsof 和 awk 命令放在了远程 ssh 命令中,并使用 \$2 来确保对于远程主机而言 $2 被解析为命令参数。

    这样修改后,SSH 命令将远程执行 lsof、awk 和 kill 命令来关闭每个节点的 Elasticsearch 进程。这样应该能够关闭每个节点的进程。请确保您对节点有足够的权限以执行关闭进程的操作。

    评论

报告相同问题?

问题事件

  • 修改了问题 9月13日
  • 修改了问题 9月13日
  • 创建了问题 9月13日

悬赏问题

  • ¥15 苹果系统的mac m1芯片的笔记本使用ce修改器使用不了
  • ¥15 单相逆变的电压电流双闭环中进行低通滤波PID算法改进
  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 如何卸载arcgis 10.1 data reviewer for desktop
  • ¥15 共享文件夹会话中为什么会有WORKGROUP
  • ¥15 关于#python#的问题:使用ATL02数据解算光子脚点的坐标(操作系统-windows)
  • ¥115 关于#python#的问题:未加密前两个软件都可以打开,加密后只有A软件可打开,B软件可以打开但读取不了数据
  • ¥15 在matlab中Application Compiler后的软件无法打开
  • ¥15 想问一下STM32创建工程模板时遇到得问题
  • ¥15 Fiddler抓包443