Kak*_*shi 5 bash environment-variables
我正在尝试设置 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
Run Code Online (Sandbox Code Playgroud)
结果为空,只返回“/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
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
先使用。是否可以?
问题原来是 SysV 脚本/etc/init.d/elasticsearch
本身。
在脚本中,PID_DIR
变量设置为:
PID_DIR=/var/run/elasticsearch
Run Code Online (Sandbox Code Playgroud)
但是不存在这样的目录,并且脚本中也有创建它的命令。
该NAME
和PID_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
它会尝试通过搜索某些目录中的某些文件来手动设置它,否则它将留空。