关于linux下报错 jps :command not found 解决
背景:
在linux中将脚本注册为服务让其开机自动启动,该脚本依赖jdk环境,而在/etc/profile中也配置了jdk环境,并且/etc/profile文件会在开机时自动执行,所以其中的jdk环境在开机时会自动加载,这一切看起来都没有问题。然后,我在开机后检测服务是否启动时显示:
jps :command not found
我在脚本中确实使用了jps命令,按理说只要正常配置了jdk环境,那么就可以使用jps命令。这里插个题外话:
jps解释:
JavaVirtualMachineProcessStatusTool,即java提供的一个命令,可以查看java进程以及进程pid等信息。具体用法可以参考:
https://www.jianshu.com/p/d39b2e208e72
这篇文章我觉得写的很不错。接下来回到正题:
那么为什么我在正确配置了jdk环境的情况下还是无法在脚本中使用jps命令呢
原因是:当用脚本去注册一些服务然后让其开机能够自动启动时,有的脚本依赖jdk环境,或者使用了一些java命令,这时候在linux开机时,开机自启服务就会去寻找用来注册服务的脚本中自身有没有配置jdk环境,如果没有那么就会报错,导致注册的服务无法开机自启。
解决:
在注册服务的脚本中加入jdk环境
export JAVA_HOME=/usr/local/java/jdk1.8.0_231
export PATH=$PATH:${JAVA_HOME}/bin
如果脚本还需要jre或者Java中的jar包等,则同时将相应路径配置在脚本中就好了。其实也就是将/etc/profile中的jdk配置复制一份放到脚本中就可以了。
export JAVA_HOME=/usr/local/java/jdk1.8.0_231
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
还有一个问题就是在/etc/profile中配置的jdk环境应该是全局的,但是为什么用来注册服务的脚本在linux开机时无法读取加载这个全局的jdk环境呢?为什么脚本需要的jdk环境只能配置在脚本内部呢?如果说开机时脚本没来得及去加载读取这个全局的jdk环境,我试了下开机后执行脚本依旧无法读取到这个全局的jdk环境。即使 ln -s
/usr/local/java/jdk1.8.0_231/bin/java /usr/bin/java也不行
。这个问题依旧无法得到答案。