Linux 开机启动Springboot程序

一、实现思路

1.编写启动Bash脚本、停止Bash脚本。

2.通过Linux注册服务,实现开机启动。

二、编写Bash脚本

1.启动脚本(重启适用)

创建/web/start.sh文件(文件位置可以自定义),写入内容:

#!/bin/sh
# jar包路径
APP1_NAME=/web/rc_blog.jar
 
# 查询是否有原进程
tpid1=`ps -ef|grep $APP1_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
# 如果此进程已经启动,则先杀掉
if [ $tpid1 ]; then
kill -9 $tpid1
fi
 
# 启动项目jar包,java命令写成了绝对路径,因为系统启动的时候是不识别环境变量的
# 日志文件也写成了绝对路径,不然日志会输出在init.d目录
nohup /home/jdk17/jdk-17.0.10/bin/java -jar $APP1_NAME -> /web/rc_blog.log 2>&1 &

注意:

1.java命令写成了绝对路径,因为系统启动的时候是不识别环境变量的。

2.日志文件也写成了绝对路径,不然日志会输出在init.d目录。

2.停止脚本

创建/web/stop.sh文件(文件位置可以自定义),写入内容:

#!/bin/sh
# jar包路径
APP1_NAME=/web/rc_blog-2024.jar
 
# 查询是否有原进程
tpid1=`ps -ef|grep $APP1_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
# 如果此进程已经启动,则先杀掉
if [ $tpid1 ]; then
kill -9 $tpid1
fi

3.给脚本设置权限

chmod -777 /web/start.sh
chmod -777 /web/stop.sh
或者
chmod +x /web/start.sh

如果报错:

-bash: ./start.sh: /bin/sh^M: bad interpreter: No such file or directory

这是因为在Windows环境下编辑的,Windows风格的行结束符\r\n,而Unix环境要求的是只有\n,

需处理:sed -i 's/\r//' start.sh

三、注册服务

1.切换到系统目录

cd /etc/systemd/system

2.新建服务文件

新建文件:rc_blog.service,写入内容:

[Unit]
Description=rc_blog
# 依赖项,在这些程序之后启动
# After=NetworkManager.service mysqld.service
 
[Service]
Type=forking
# 配置启动脚本
ExecStart=/web/start.sh
# 配置重启脚本
ExecReload=/web/start.sh
# 配置停止脚本
ExecStop=/web/stop.sh
PrivateTmp=true
 
[Install]
WantedBy=multi-user.target

3.配置服务

#配置开机启动
systemctl enable rc_blog.service

#重新加载配置
systemctl daemon-reload

到这里就可以重启测试了

#使用systemctl启动服务
systemctl start rc_blog.service

#使用systemctl停止服务
systemctl stop rc_blog.service

发表评论

称呼 *
联系方式 * 方便与您联系,不会对外显示。
内容
验证码