环境
SpringBoot 2.X
CentOS7
问题
springboot应用一般都打包成一个单独的jar包,然后使用nohup java -jar xxxx.jar &
,但是这样有个问题:服务器重启后需要手工启动。
解决
后来翻官方网站,找到办法:
官方地址
我这里使用3.2.1 init.d 方法。
# 授予执行权限
chmod +x /var/myapp/myapp.jar
#使用软连接方式,不需要写启动脚本,spring在打包时已经内置
$ sudo ln -s /var/myapp/myapp.jar /etc/init.d/myapp
举个例子(wechat-token-proxy),使用 ll 命令列出 /etc/init.d/目录,如下图
看最后一条 wechat-token-proxy,注意颜色 。
如果是红底白字并且闪烁,则锁门链接文件有问题。
#开启启动
chkconfig myapp on
使用 chkconfig 命令,检查是否生效,如图
Next,就可以用下面命令控制服务了
#启动
service myapp start
#停止
service myapp stop
#重启
service myapp restart
#查看状态
service myapp status
注:
cannot execute binary file
:必须使用spring boot的Maven插件来打包,并且设置为可执行;
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
- 控制台日志输出至 /var/log/myapp.log
- 如果出现 Permission denied,给myapp增加执行权限
chmod +x /var/myapp/myapp.jar
- 传递参数
创建同名的配置文件
myapp.conf
RUN_ARGS=
JAVA_OPTS=-Xmx2G -XX:+HeapDumpOnOutOfMemoryError -Dspring.profiles.active=prod
https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#deployment.installing.nix-services.script-customization.when-running