如何为“elasticsearch”程序的所有用户设置JAVA_HOME?

如何为“elasticsearch”程序的所有用户设置JAVA_HOME?

我正在尝试设置 JAVA_HOME,elasticsearch但是到现在还没有成功。

我尝试将其设置在.bashrc,,etc/environmentetc/.profile都失败了。

这是我用来运行 elasticsearch 的命令:

sudo /etc/init.d/elasticsearch start

我尝试在终端中调试 JAVA_HOME 变量,如下所示:

  1. echo $JAVA_HOME
  2. sudo echo $JAVA_HOME

/home/mockie/softwares/jdk1.8.0_45我得到了两者的结果,这对于我的 JAVA 来说都是正确的路径。

我也尝试过/etc/init.d/elasticsearch这样的调试:

echo "$JAVA_HOME/dodol"
exit 1

结果为空,只返回“/dodol”。

这是完整代码etc/init.d/elasticsearchhttps://gist.github.com/mockiemockiz/c9547aee791ee04c2e1d

这是我的etc/environment

    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

    JAVA_HOME=/home/mockie/softwares/jdk1.8.0_45

但当我尝试这个时:

$ sudo su
$ /etc/init.d/elasticsearch start

并且它起作用了!但我想要的是先使用sudo /etc/init.d/elasticsearch startwithout sudo su。这可能吗?

答案1

问题最终出在 SysV 脚本/etc/init.d/elasticsearch本身。

在脚本中,PID_DIR变量设置为:

PID_DIR=/var/run/elasticsearch 

但是不存在这样的目录,并且脚本中也有创建该目录的命令。

NAME设置PID_FILE为:

NAME=elasticsearch
PID_FILE="$PID_DIR/$NAME.pid" 

因此,当尝试在( )中PID_FILE创建文件"$PID_DIR/$NAME.pid"( ) 时,它会获取:/var/run/elasticsearch/elasticseach.pid$PID_DIR/var/run/elasticsearch/

touch: cannot touch ‘/var/run/elasticsearch/elasticsearch.pid’: No such file or directory 

错误,因为目录/var/run/elasticsearch不存在。

关于JAVA_HOME变量,脚本/etc/init.d/elasticsearch不使用系统的变量,而是使用/创建脚本中定义明确的变量的自己的版本。

根据脚本,如果JAVA_HOME没有设置,/etc/default/elasticsearch它将尝试通过在某些目录中搜索某些文件来手动设置,否则它将保留为空白。

答案2

我遇到了同样的问题,我所做的是创建一个 /etc/default/elastic 文件,其中包含下一行:

JAVA_HOME=/pathto/jdk

答案3

正如这里提到的环境变量

您可以通过三种方式设置系统范围的环境变量:

  • /etc/环境
  • /etc/配置文件
  • /etc/profile.d/*.sh

例如,您可以使用 /etc/profile。在您的机器上执行此命令

sudo echo "JAVA_HOME=/home/mockie/softwares/jdk1.8.0_45" >> /etc/profile

答案4

我遇到了这个问题,上面提供的解决方案可能有效。但是,如果有人想在不重新启动服务器的情况下完成此操作,只是安装了 java,你可以按照我做的做(这可能是错误的,但它有效)。

调整:

/etc/systemd/system/multi-user.target.wants/elasticsearch.service

添加此行:

Environment=JAVA_HOME=/usr/lib/jvm/jdk-11.0.4/

在 [service] 部分,您可能需要用实际的 java 安装替换 /usr/lib/jvm/jdk-11.0.4/。

我希望这会有所帮助,并且我向 elasticsearch 团队为修改他们的文件而道歉,显然我无权修改默认文件。

相关内容