Spring Boot项目打成jar包部署时,一般会配合脚本来方便管理服务的启动与关闭,本文总结了在实践过程中用到的脚本,具体内容如下所示:
1、创建服务启动脚本xxx-startup.sh,其内容如下所示
#!/bin/bash
echo "服务启动"
# 后台运行jar包任务
nohup java -Xms1024m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -jar xxx.jar --server.port=8080 > xxx.out 2>&1 &
# 将启动的进程PID写入到指定的文件中,以便后续关闭服务时使用
echo $! > xxx.pid
脚本解释:
正常情况下我们使用java命令运行jar包的时候,命令行终端会被进程锁定,这个时候如果关闭窗口或者解锁锁定,就会导致程序也跟着结束。因此,上述脚本中使用了nohup命令 + & 来使得当前终端任务运行于后台,保证在关闭终端或者窗口时程序不会退出。
此外,默认情况下 nohup命令 + & 后台任务会将原本在前台控制台输出的内容输出到 nohup.out 文件中,我们使用 > 将标准输出和标准错误结果输出到指定的文件中,上述脚本中 2>&1 意思是将标准错误(2)重定向到标准输出中(1),而标准输出又导入文件xxx.out中,如果不写这个会提示:nohup重定向标准错误到标准输出。
脚本最后一行是将当前终端启动的任务进程ID(PID)输出到指定的文件中,其中 $! 表示PID。
2、记得要给脚本授权
chmod 777 xxx-startup.sh
3、创建服务关闭脚本xxx-shutdown.sh,内容如下
#!/bin/bash
echo "关闭服务"
PID_FILE=./xxx.pid
if [ -e "$PID_FILE" ]; then
kill -9 $(cat $PID_FILE)
rm -f $PID_FILE
else
echo "找不到服务PID文件"
fi
在启动脚本中我们将进程ID(PID)保存到了服务对应的PID文件中,因此在关闭服务的脚本中,可以直接使用 kill -9 来杀掉服务进程,并将PID文件删除