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

Kak*_*shi 5 bash environment-variables

我正在尝试设置 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
Run Code Online (Sandbox Code Playgroud)

结果为空,只返回“/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
Run Code Online (Sandbox Code Playgroud)

但是当我尝试这个时:

$ sudo su
$ /etc/init.d/elasticsearch start
Run Code Online (Sandbox Code Playgroud)

它有效!但我想要的是sudo /etc/init.d/elasticsearch start不用sudo su先使用。是否可以?

hee*_*ayl 5

问题原来是 SysV 脚本/etc/init.d/elasticsearch本身。

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

PID_DIR=/var/run/elasticsearch 
Run Code Online (Sandbox Code Playgroud)

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

NAMEPID_FILE被设置为:

NAME=elasticsearch
PID_FILE="$PID_DIR/$NAME.pid" 
Run Code Online (Sandbox Code Playgroud)

因此,当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 
Run Code Online (Sandbox Code Playgroud)

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

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

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