我正在尝试设置 JAVA_HOME,elasticsearch
但是到现在还没有成功。
我尝试将其设置在.bashrc
,,etc/environment
但etc/.profile
都失败了。
这是我用来运行 elasticsearch 的命令:
sudo /etc/init.d/elasticsearch start
我尝试在终端中调试 JAVA_HOME 变量,如下所示:
echo $JAVA_HOME
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/elasticsearch
:
https://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 start
without 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 团队为修改他们的文件而道歉,显然我无权修改默认文件。