#!/bin/bash
es_home=/opt/module/elasticsearch-6.3.1
kibana_home=/opt/module/kibana-6.3.1
case $1 in
start)
for host in linux1 linux2 linux3; do
echo "========== $host 启动es ========="
ssh $host "source /etc/profile; nohup $es_home/bin/elasticsearch 1>/dev/null 2>&1 & "
done
echo "========== 启动kibana ========="
nohup $kibana_home/bin/kibana 1>/dev/null 2>&1 &
;;
stop)
echo "========== 停止 kibana ========="
ps -ef | awk '/kibana/ && !/awk/ {print $2}'| xargs kill -9
for host in linux1 linux2 linux3 ; do
echo "========== $host停止 es ========="
ssh $host "ps -ef | awk '/elasticsearch/ && !/awk/ {print \$2}'| xargs kill -9"
done
;;
*)
echo "你启动的姿势不对"
echo " start 启动es集群和Kibana"
echo " stop 停止es集群和Kibana"
;;
esac
说明1:nohup,该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂断 (no hang up) 的意思,不挂断地运行命令。
说明2: 1、2,表示标准输出、标准错误, 这里把它们都输入进了黑洞 (/dev/null),也可以指定输出到一个文件
理解为:标准输出重定向到/dev/null,错误输出重定向到标准输出,前面标准输出已重定向到/dev/null,所以标准输出/错误输出都重定向到/dev/null
说明3:放在尾部的 & 表示把进程推到后台
说明4:awk 默认分隔符为空格
说明5: ps 参数:
-e : 显示所有进程
-f : 全格式
说明6: awk '/elasticsearch/' :过滤出包含 elasticsearch 字段的进程,同时查出会带有 awk 的进程, 因此需要与(&&) 上 !/awk/ 来反过滤掉awk进程, 最后通过 {print \$2} 取得进程号
( ps -ef | grep ${kibana_home} | grep -v grep | awk '{print $2}' | xargs kill -9 ) <= 这一步通过 grep 也可以实现, grep -v grep : 反过滤 grep 进程
说明7:xargs 表示取出前面命令运行的结果,作为后面命令的输入参数。在这里可以接受到前面的进程号用来杀死。