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:
echo $Java_HOME
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?
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.
Comme mentionné ici EnvironmentVariables
Vous pouvez définir des variables d'environnement à l'échelle du système de trois manières:
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
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