本来jps看了下,kafka和zookeeper都起来了,手痒,非要换宝塔的进程守护管理器,选目录为/home/kafka,命令为/home/kafka/bin/zookeeper-server-start.sh /home/kafka/config/zookeeper.properties
就在日志里看到 kafka/bin/kafka-run-class.sh: line 342: exec: java: not found
网上搜了大量的资料,有的说
原因:java环境变量的问题,kafka默认引用的java路径:/user/bin/java,但是我们实际路径不是这个。看有的博主说改环境变量,或者设置软连接指向/user/bin/java这个路径。
解决方案:首先,不推荐修改环境变量,其次创建软连接的方式,确实能解决这个报错,但是亲测执行后会有其他报错,kafka启动的时候获取java版本时会报错。
我就去vim看了下这个sh文件的342行看看究竟,发现是个判断
# Which java to use
if [ -z "$JAVA_HOME" ]; then
JAVA="java"
else
JAVA="$JAVA_HOME/bin/java"
fi
莫非,又莫非……到底是走了哪个逻辑分支?
于是毒丸计划开始,JAVA="java"改成JAVA="java1",保存重新在进程管理器点启动,报错,去看日志: /home/kafka/bin/kafka-run-class.sh: line 342: exec: java1: not found
哇咔咔,你果然是没判断出 JAVA_HOME已经有值了,我本可以武断的结束这个闹剧
但是一想,YYDSB啊,为啥设置了却找不到啊,认知啊,认知才是不同身份的人的最大的差别! 身份?!!!莫非是因为我SSH登录的?于是我又查到了这位仁兄的资料:
通过ssh登陆之后会发现找不到JAVA_HOME ,我的JAVA_HOME是定义在/etc/profile 里面的。
研究后发现远程登录和直接登录执行的文件是不一样的:
/etc/profile: 当用户登录时,该文件被执行.
/etc/bashrc: 当bash shell被打开时,该文件被执行.ssh作为远程登录的方式进入,当然就无法触发/etc/profile的执行,所以会发生找不到JAVA_HOME的问题,所以需要将java的配置信息配置到bashrc的文件中去,配置步骤如下所示:
.bashrc是一个隐藏的文件,要打开并修改该文件需要:
(1) 命令 vim ~/.bashrc 进入到文件;
(2) 直接按 i 键可以对文件进行修改, Esc + :+ wq退出并保存修改之后的文件
(3) 命令 :source ~/.bashrc 更新 .bashrc
对该文件进行修改保存后,在执行相关的操作,就不会发生如上的问题啦。
好吧,我打开了贴进去
#java environment
JAVA_HOME=/home/jdk1.8.0_351
JRE_HOME=$JAVA_HOME/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
不成啊,还是老毛病,还是下硬手吧,把if给灭了,多余
# Which java to use
if [ -z "$JAVA_HOME" ]; then
JAVA="/home/jdk1.8.0_351/bin/java"
else
JAVA="$JAVA_HOME/bin/java"
fi
再去进程守护管理器,点启动,欧了
这世界,就是有时候没地儿说理去!!