centos7将jar包制作服务并设置开机服务

为了避免服务器因为一些原因重启导致java服务没启动,我们将jar包制作为service并开机启动

制作过程

在网上找了一些关于java jar包制作开启启动的,大致流程为先做一个xxx.service,放在/etc/systemd/system/目录下,然后执行systemctl daemon-reload,通过systemctl enable xxx.service来开机启动,通过systemctl start xxx启动服务,通过systemctl stop xxx停止服务,通过systemctl status xxx查看服务状态

成功案例

下面分享一个我做的一个成功的xxx.service,这里面遇到了一些坑,分享给大家,方便避坑

我这里是ems.service,根据自己的实际情况改名字

复制代码
vim /etc/systemd/system/ems.service

写入如下内容,注意Description改成自己的描述信息,ExecStart改成自己的java路径jar包路径

shell 复制代码
[Unit]
Description=ems service
After=network.target

[Service]
Type=simple
ExecStart=/opt/java/jdk-11.0.22/bin/java -jar /opt/app/ems/ems-api.jar

[Install]
WantedBy=multi-user.target

完成后执行下面的命令,注意将服务的名称ems改成自己的

shell 复制代码
#重新加载配置文件
systemctl daemon-reload
#将ems加入开机启动
systemctl enable ems
#启动ems
systemctl start ems
#查看ems服务状态
systemctl status ems
#查看ems服务日志
journalctl -f -u ems

其它命令

shell 复制代码
#停止ems
systemctl stop ems
#重启ems
systemctl restart ems

中间遇到的坑

ems.service: control process exited, code=exited status=143

这个的主要原因是我在网上看的将Type=simple设置为了forking

forking官方解释

forking -- The process started with ExecStart spawns a child process that becomes the main process of the service. The parent process exits when the startup is complete.

当进程启动后就停止了,所以我们的java程序不应该是forking的,我们的程序要一直运行

默认Type是simple,我们可以不写,但是千万别写成forking了。

关于Type=forking网上有很多误导,希望大家别踩坑了。

下面是Type为forking的一些表现形式

1 执行systemctl start ems后终端一直是占用的,没有停止

2 程序启动后过一会儿就结束了

这一点官方文档已经说明了就是The parent process exits when the startup is complete.,如果是某个任务执行就结束没问题,但是不适用于我们的java程序,我们的程序需要一直提供服务

日志关键信息

shell 复制代码
ems.service start operation timed out. Terminating.
ems.service: control process exited, code=exited status=143
Failed to start EMS Service.
Unit ems.service entered failed state.
ems.service failed.

正确的启动应该是下面这样的

希望踩过的坑对大家有所帮助,如果你也想制作java开机启动服务,将成功案例直接复制,修改一下路径就可以了

参考文献

官方文档

相关推荐
自不量力的A同学1 分钟前
Solon AI v3.9 正式发布:全能 Skill 爆发
java·网络·人工智能
万岳科技系统开发12 分钟前
食堂采购系统源码库存扣减算法与并发控制实现详解
java·前端·数据库·算法
独断万古他化16 分钟前
【Spring 原理】Bean 的作用域与生命周期
java·后端·spring
*小海豚*21 分钟前
在linux服务器上DNS正常,但是java应用调用第三方解析域名报错
java·linux·服务器
撩得Android一次心动37 分钟前
Android LiveData 全面解析:使用Java构建响应式UI【源码篇】
android·java·android jetpack·livedata
组合缺一41 分钟前
Solon AI (Java) v3.9 正式发布:全能 Skill 爆发,Agent 协作更专业!仍然支持 java8!
java·人工智能·ai·llm·agent·solon·mcp
MSTcheng.1 小时前
【C++】C++11新特性(二)
java·开发语言·c++·c++11
一 乐1 小时前
校园二手交易|基于springboot + vue校园二手交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
KIKIiiiiiiii1 小时前
微信个人号API二次开发中的解决经验
java·人工智能·python·微信
80530单词突击赢1 小时前
SpringBoot整合SpringMVC全解析
java·spring boot·后端