记一次systemd服务启动找不到Java命令

首先systemd服务文件
/etc/systemd/system/test.service(文件简化处理了)

[Unit]
Description=test
After=network.target
[Service]
ExecStart=/opt/test/bin/test_start.sh
[Install]
WantedBy=multi-user.target

其中启动命令ExecStart指向的是一个sh启动脚本,
脚本内就是简单的jar包启动命令 java -jar test.jar
然后执行启动命令:

sudo systemctl restart test.service

查看日志发现

3月 06 17:33:29 localhost.localdomain test.sh[8322]: /opt/cloud/bin/test_start.sh:行2: java: 未找到命令
3月 06 17:33:29 localhost.localdomain systemd[1]: test.service: Main process exited, code=exited, status=127/n/a
3月 06 17:33:29 localhost.localdomain systemd[1]: test.service: Failed with result 'exit-code'.

但是单独执行这个sh脚本是能找到java命令的

解决方案1:

在service文件中的==[service]==块添加java环境:

Environment=JAVA_HOME=/opt/jdk

解决方案2:

在sh脚本文件里面,添加环境变量信息(没有尝试,也是不推荐)

我这里有从别处转移的十几个servcie文件,不想一一修改,所以不采用这两个方案

在网上一顿摸索(可看最后的最终解决方案):
尝试1:
在 /etc/profile 或者 /etc/bashrc 中配置JAVA_HOME变量,这个是系统变量,在所有用户登陆的时候会加载进去,这样配置完java环境后,所有用户都能使用java命令,但是不适用Systemd
尝试2:
在 /etc/environment 配置PATH环境,也不行

最终解决方案

将java指令都添加到软连接

sudo ln -s /opt/jdks/jdk-11/bin/java /usr/bin/java
sudo ln -s /opt/jdks/jdk-11/bin/javac /usr/bin/javac
sudo ln -s /opt/jdks/jdk-11/bin/javadoc /usr/bin/javadoc
sudo ln -s /opt/jdks/jdk-11/bin/javap /usr/bin/javap

可去 /usr/bin里面确认下(可以看到已经添加成功了)

在这里插入图片描述

然后在启动服务就可以了

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值