web-dev-qa-db-fra.com

Comment définir Java_HOME pour tous les utilisateurs du programme "elasticsearch"?

J'essaie de définir Java_HOME pour elasticsearch mais pas de chance jusqu'à présent.

J'ai essayé de le définir dans .bashrc, etc/environment, etc/.profile tous échouent.

c’est la commande que j’utilise pour lancer elasticsearch:

Sudo /etc/init.d/elasticsearch start

J'ai essayé de déboguer la variable Java_HOME dans le terminal comme ceci:

  1. echo $Java_HOME
  2. Sudo echo $Java_HOME

J'ai obtenu le résultat /home/mockie/softwares/jdk1.8.0_45 pour les deux, qui correspond au chemin correct pour mon Java.

J'ai aussi essayé de déboguer /etc/init.d/elasticsearch comme ceci:

echo "$Java_HOME/dodol"
exit 1

et le résultat était vide et ne renvoyait que "/ dodol".

c'est le code complet pour etc/init.d/elasticsearch: https://Gist.github.com/mockiemockiz/c9547aee791ee04c2e1d

et voici mon 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

mais quand j'essaye ceci:

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

et il fonctionne! mais ce que je veux, c'est utiliser Sudo /etc/init.d/elasticsearch start sans Sudo su avant. c'est possible?

3
Kakashi

Le problème s'est avéré être le script SysV /etc/init.d/elasticsearch lui-même.

Dans le script, la variable PID_DIR est définie comme suit:

PID_DIR=/var/run/elasticsearch 

mais ce répertoire n'existe pas et il est également possible de le créer dans le script.

NAME et PID_FILE sont définis comme suit:

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

Ainsi, lorsque PID_FILE tente de créer un fichier "$PID_DIR/$NAME.pid" (/var/run/elasticsearch/elasticseach.pid) dans $PID_DIR (/var/run/elasticsearch/), il obtient:

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

erreur car le répertoire /var/run/elasticsearch n'existe pas déjà.

En ce qui concerne la variable Java_HOME, le script /etc/init.d/elasticsearch n'utilise pas la variable du système, mais utilise/crée sa propre version de la variable qui est bien définie dans le script.

Selon le script, si Java_HOME n'est pas défini dans /etc/default/elasticsearch, il essaiera de le définir manuellement en recherchant certains fichiers dans certains répertoires, sinon il le laissera vide.

4
heemayl

Comme mentionné ici EnvironmentVariables

Vous pouvez définir des variables d'environnement à l'échelle du système de trois manières:

  • / etc/environment
  • / etc/profile
  • /etc/profile.d/*.sh

Vous pouvez utiliser par exemple/etc/profile. Exécutez ceci sur votre machine

Sudo echo "Java_HOME=/home/mockie/softwares/jdk1.8.0_45" >> /etc/profile
1
Mohsen Ibrahim

J'ai eu le même problème, ce que j'ai fait était de créer un fichier/etc/default/élastique avec la ligne suivante à l'intérieur:

Java_HOME=/pathto/jdk
0
Ignacio Cañon