springboot的jar如何开启启动
方式方法
将springboot的jar,制作成systemd的service,通过systemctl启停
操作步骤
1. 需要先将jar打包成可执行模式
在spring-boot-maven-plugin中,添加<configuration>:<executable>true</executable>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
<goal>build-info</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
上传到服务器后,需赋予+x权限
[root@localhost ~]# chmod 544 abc.jar
[root@localhost ~]# ll
总用量 339860
-r-xr--r--. 1 root root 115524758 9月 21 10:11 abc.jar
这样,打包出来的jar文件,赋予linux的x权限后,是可以无需java -jar而直接执行的
示例:(无需执行以下命令)
[root@localhost ~]#./abc.jar
2. 制作成systemd服务
在/etc/systemd/system/目录下,新建.service文件
[root@localhost ~]# cd /etc/systemd/system
[root@localhost system]# vi abc.service
文件内容如下:
[Unit]
Description=IDaaS provider
After=syslog.target network.target
[Service]
User=root
Group=root
WorkingDirectory=/home/idaas
ExecStart=/home/abc/abc.jar
Environment="JAVA_HOME=/home/java/jdk-8"
Environment="JAVA_OPTS=-Dserver.port=8081 -Xms2g -Xmx2g -Dlogging.path=./logs -Dfile.encoding=UTF-8"
Environment="RUN_ARGS=--spring.config.additional-location=./conf/"
SuccessExitStatus=143
TimeoutStopSec=20
[Install]
WantedBy=multi-user.target
3. 启动systemd服务
保存完.service文件后,就可以开始使用systemctl启停了
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl start abc
而后可以用systemctl status abc看状态,systemctl stop来停止,并且可以用systemctl enable来设置开机启动
4. 查看进程
使用ps命令,可以看到如下信息
[root@localhost ~]# ps -ef | grep abc
root 23667 1 0 9月20 ? 00:00:00 /bin/bash /home/abc/jar/abc.jar
root 23684 23667 0 9月20 ? 00:05:25 /home/java/jdk-8/bin/java -Dsun.misc.URLClassPath.disableJarChecking=true -Dserver.port=8081 -Xms2g -Xmx2g -Dlogging.path=./logs -Dfile.encoding=UTF-8 -jar /home/abc/abc.jar --spring.config.additional-location=./conf/
root 26776 26067 0 10:44 pts/0 00:00:00 grep --color=auto abc
可以看到,一共有两个进程, 其中pid=23667是被systemd直接启动的abc.jar文件
而abc.jar文件自身,又启动了另一个pid=23684的进程,该进程执行了java -jar的命令
该进程命令行格式为:
%JAVA_HOME%/bin/java -Dsun.misc.URLClassPath.disableJarChecking=true %JAVA_OPTS% -jar /home/abc/abc.jar %RUN_ARGS%
关键信息都取自.service文件里所配置的环境变量
同时我们查看下进程的启动目录
[root@localhost ~]# ll /proc/23684
总用量 0
dr-xr-xr-x. 2 root root 0 9月 21 10:49 attr
...
lrwxrwxrwx. 1 root root 0 9月 21 10:49 cwd -> /home/abc/jar
...
lrwxrwxrwx. 1 root root 0 9月 20 18:51 exe -> /home/java/jdk-8/bin/java
...
可以看到,该java -jar命令是在jar文件所在目录启动的
故,JAVA_OPTS和RUN_ARGS中的各式路径,应基于jar文件所在目录写相对路径