本文由 简悦 SimpRead 转码, 原文地址 https://blog.csdn.net/ToBeABetterOne/article/details/80093318 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/ToBeABetterOne/article/details/80093318

最近项目用到 spring boot,看了官方文档,可以把 spring boot 的 jar 包安装为一个 service,直接用 service serviceName start/stop/status/restart 来控制。还可以设置开机自动启动,这样可以防止进程被杀掉。
可以:

  1. Starts the services as the user that owns the jar file
  2. Tracks application’s PID using /var/run/appname.pid
  3. Writes console logs to /var/log/appname.log

但是按照教程配置之后 service myapp start 启动时一直报 Unit myapp.service not found。找了很久才找到解决办法。

打包

用 maven 打包举例,plugin 加上参数

1
2
3
4
5
6
7
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <executable>true</executable>
    </configuration>
</plugin>

这个可以打包为可执行文件,用./myapp.jar 可以直接执行,而不用一般的 java -jar。

注册服务

接下来需要把服务注册到 init.d。
在这之前需要修改文件的权限为可执行

1
chmod 755 myapp.jar

注册服务很简单,只需要创建一个连接

1
ln -s /myfolder/myapp/myapp.jar /etc/init.d/myapp

启动

按照教程上的说法,这样就可以直接用命令启动服务了

1
service myapp start

但是在我这里一直报错 Unit myapp.service not found

trouble shooting

虽然用service myapp start 不能启动,但是可以用/etc/init.d/myapp start 成功启动。
在网上看了很多帖子,最后尝试执行了
update-rc.d myapp defaults
成功~
这个命令在 spring boot 文档里是用来注册开机自动启动的, 不是很理解为什么要执行这个才可以。

jar 包更新

jar 包更新后需要执行systemctl daemon-reload 更新服务。

附上 Spring boot 文档
https://docs.spring.io/spring-boot/docs/1.5.8.RELEASE/reference/html/deployment-install.html#deployment-systemd-service