kafka/bin/kafka-run-class.sh: line 342: exec: java: not found

本来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 里面的。

扫描二维码关注公众号,回复: 15108384 查看本文章

研究后发现远程登录和直接登录执行的文件是不一样的:

    /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

再去进程守护管理器,点启动,欧了

这世界,就是有时候没地儿说理去!!

猜你喜欢

转载自blog.csdn.net/xgocn/article/details/128652292