一、问题描述
执行编写的kafka集群启动脚本时,发现kafka集群服务器并没有启动起来,并且还没有报错日志
脚本如下:
#! /bin/bash
case $1 in
"start"){
for i in bigdata111 bigdata112 bigdata113
do
echo " --------启动 $i Kafka-------"
ssh $i "/opt/module/kafka/bin/kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties"
done
};;
"stop"){
for i in bigdata111 bigdata112 bigdata113
do
echo " --------停止 $i Kafka-------"
ssh $i "/opt/module/kafka/bin/kafka-server-stop.sh stop"
done
};;
esac
问题原因:
登录式Shell,采用用户名比如xxx登录,会自动加载/etc/profile
非登录式Shell,采用ssh比如ssh 192.168.1.121登录,不会自动加载/etc/profile,会自动加载~/.bashrc
二、解决方法
1、先测试 ssh [bigdata111 ip] “which java” 是否有反应,如果显示"no found",则需要配置
[root@bigdata111 bin]# ssh bigdata112 "which java"
which: no java in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin)
2、配置 ~/.bashrc文件
[root@bigdata111 bin]# vim ~/.bashrc
在里面添加下面的配置
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
并将.bashrc文件分发到其他节点上
[root@bigdata111 bin]#scp ~/.bashrc root@bigdata112:/root/.bashrc
[root@bigdata111 bin]#scp ~/.bashrc root@bigdata113:/root/.bashrc
3、继续测试 ssh [bigdata111 ip] “which java” 成功后重启脚本,看进程是否存在
[root@bigdata111 bin]# ssh bigdata111 "which java"
/opt/module/jdk1.8.0_212/bin/java
此时,kafka集群已经可以通过shell脚本正常启动了