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_HOMEsudo 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它会尝试通过搜索某些目录中的某些文件来手动设置它,否则它将留空。
| 归档时间: |
|
| 查看次数: |
26682 次 |
| 最近记录: |