springboot项目注册为Linux的服务并设置开机自启动
一般项目生产环境都在Linux上面跑,所以今天我们来讲一下如何在Linux中将springboot项目注册为系统服务并设置开机自启动,这里我们以Centos7.6为例。
1、上传我们的springboot项目的jar包
如下图所示:
名为demo-0.0.1-SNAPSHOT.jar
2、 启动项目
java -jar demo-0.0.1-SNAPSHOT.jar
补充:
可能存在极少数是这样(或者类似)来启动springboot项目,其实这里的这种方式启动跟window中开启cmd窗口启动类似,这里不能退出交互,例如:Ctrl+C就会被kill掉。所以,比较好的一种方案,就是将springboot项目注册为Linux系统服务。
3、 基于Linux的Systemd部署springboot项目
(1)关于systemd简单介绍:
systemd是Linux 下一个与SysV和LSB初始化脚本兼容的系统和服务管理器。systemd 使用 socket和D-Bus来开启服务,提供基于守护进程的按需启动策略,保留了Linux cgroups的进程追踪功能,支持快照和系统状态恢复,维护挂载和自挂载点,实现了各服务间基于从属关系的一个更为精细的逻辑控制,拥有前卫的并行性能。systemd无需经过任何修改便可以替代sysvinit 。
补充:
关于systemd的更多内容请参考:
https://fedoraproject.org/wiki/Systemd/zh-cn
(2) 编写service文件
配置文件主要放在/usr/lib/systemd/system下,在/etc/systemd/system也有。
这里我们以/etc/systemd/system为例:
cat demo.service
这里的这个demo.service是我之前写好的
内容如下,比较简单:
[Unit]
Description=java springboot service
After=syslog.target
[Service]
ExecStart=/general/jdk1.8/bin/java -jar /general/demo-0.0.1-SNAPSHOT.jar
[Install]
WantedBy=multi-user.target
简单的解释:
[Unit]:启动顺序与依赖关系
Description:当前服务的简单描述。
After:如syslog.target需要启动,那么demo.service应该在它之后启动。
[Service]:启动行为
ExecStart:定义启动进程时执行的命令。
如:/general/jdk1.8/bin/java -jar /general/demo-0.0.1-SNAPSHOT.jar。
[Install]
WantedBy:表示该服务所在的Target(服务组)。
补充:
这里可以查看multi-user.target包含的所有服务,如下:
systemctl list-dependencies multi-user.target
(3) 、启动服务
#启动
systemctl start demo.service
#查看服务状态
systemctl status demo.service
(4) 、查看日志
journalctl -u demo
-u:查看指定名字的Unit日志
关于journalctl命令大家自行man。
亦可
journalctl -u demo -f
(5) 访问web界面
#查看ip
ip a
访问
(6)设置开机自启动
#开机启动
systemctl enable demo.service
#查看是否设置成功
[root@docker ~]# systemctl list-unit-files | grep enabled | grep demo
demo.service enabled
(7)总结
最后,本例用到的demo.service文件仅是作为测试文件,这里只是给大家提供一个思路。关于它的完善需要大家根据自己的需求来填充。
补充一些常用命令:
开机自启:systemctl enable demo.service
关闭自启:systemctl disable demo.service
启动服务:systemctl start demo.service
停止服务:systemctl stop demo.service
重启服务:systemctl restart demo.service
查看服务状态:systemctl status demo.service
最后感谢大家支持。