现象:service文件ExecStart=jar-start.sh。脚本中包含java -jar xxx命令。执行systemctl xxx start后报错java: command not found。但在终端前台启动脚本(sh jar-start.sh)就不会报错。
原因:Systemd使用固定的搜索路径。
在systemd.exec手册页中:

Systemd使用固定值
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin。

所以以上路径没有java文件的话启动就会报错。
最佳解决方案是在service.sh脚本中使用java可执行文件的完整路径。

解决:jar-start.sh增加如下判断:

if [ -e /usr/bin/java ]; then
	javaPath=/usr/bin/java
elif [ -e /usr/local/java/jdk1.8.0_131/bin/java ]; then
	javaPath=/usr/local/java/jdk1.8.0_131/bin/java
else
	source /etc/profile
	javaPath=java
fi
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐